【问题标题】:Read xml on file to dataset error将文件中的 xml 读取到数据集错误
【发布时间】:2014-01-02 18:14:29
【问题描述】:

我尝试了不同的方法?

第一次尝试:这里我有这个错误“根级别的数据无效。第1行,位置1。”

StringReader StringStream = new StringReader(strFullPath);
DataSet ds = new DataSet();
ds.ReadXml(StringStream);

第二次尝试:

 using (StreamReader mySR = new StreamReader(strFullPath,  Encoding.GetEncoding("iso-8859-1")  )) 
   {
     XmlDocument lgnXml = new XmlDocument();
     lgnXml.Load(mySR);   This line has no errors,  Only to test....

     lrs1.ReadXml(mySR,XmlReadMode.ReadSchema);  But in this line I have the error "Root element is missing."

   }

这里是xml的第一部分(结构)

    <NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true" msdata:PageSize="0" msdata:CurrentPosition="0" msdata:ConnectionString="" msdata:Sort="" msdata:LoadSchemaOnly="False" msdata:Filter="" msdata:AbsolutePosition="1" msdata:SqlQuery="" msdata:AbsolutePage="0" msdata:Disconnected="False">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="LanguageID" type="xs:int" minOccurs="0" />
                <xs:element name="Compania" type="xs:string" minOccurs="0" />
                <xs:element name="Facilidad" type="xs:string" minOccurs="0" />
                <xs:element name="Cuenta" type="xs:string" minOccurs="0" />
                <xs:element name="Numero" type="xs:string" minOccurs="0" />

还有数据

<Table>
<LanguageID>2</LanguageID>
<Compania>Company</Compania>
<Facilidad>Facility</Facilidad>
<Cuenta>Account</Cuenta>
<Numero>Number</Numero>
<Nombre>Name</Nombre>

还有更多的领域...

谢谢, 何塞

【问题讨论】:

  • 好像是xml或者xml接收有问题。也许这是空字符串,或者 xml 被截断。
  • 我检查了 xml 文件,但似乎是完整的。
  • &lt;Table&gt;,但没有&lt;/Table&gt;。有&lt;NewDataSet&gt;,但没有&lt;/NewDataSet&gt;

标签: c# dataset readxml


【解决方案1】:

只有将 XML 放入 StringReader 构造函数时,您的第一次尝试才有效:

 StringReader StringStream = new StringReader(@"<Table>
<LanguageID>2</LanguageID>
<Compania>Company</Compania>
<Facilidad>Facility</Facilidad>
<Cuenta>Account</Cuenta>
<Numero>Number</Numero>
<Nombre>Name</Nombre>
</Table>");
DataSet ds = new DataSet();
ds.ReadXml(StringStream);

ds.Dump(); // LinqPad testcase, shows loaded dataset

如果您遗漏了测试线,您的第二个样本应该可以工作

lgnXml.Load(mySR);   

因为行将读取流直到结束。方法lrs1.ReadXml( 没有更多字符需要处理,因此出现错误。

【讨论】:

    【解决方案2】:

    尝试查看 Xml 内容(未测试):

     using (StreamReader mySR = new StreamReader(strFullPath,  Encoding.GetEncoding("iso-8859-1")  )) {
         XmlDocument lgnXml = new XmlDocument();
         lgnXml.Load(mySR);//This line has no errors,  Only to test....
    
         while ((line = mySR.ReadLine()) != null)
         {
            Console.WriteLine(line);//"Debug"
         }
       }
    

    很可能您的 xml 没有出现,或者被截断。

    注意:在您的 xml 中有 &lt;Table&gt;,但没有 &lt;/Table&gt;。有&lt;NewDataSet&gt;,但没有&lt;/NewDataSet&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 2014-06-19
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多