使用C#Dataset读取xml文件

时间:2015-02-19 05:51:35

标签: c# xml

我有一个包含以下数据的xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Tables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <countries>
        <country country_id = "1" name = "Afghanistan"/>
        <country country_id = "2" name = "Albania"/>
        <country country_id = "3" name = "Algeria"/>
    </countries>
</Tables>

当我尝试使用下面的C#代码时,

DataSet ds_XMLData= new DataSet();
ds_XMLData.ReadXml(XMLFile);

我得到两张桌子: 有一列countris_id和一行值为“0”的国家/地区 包含3列的国家/地区 - 其他列为countries_id,所有行的值为“0”

能否请您帮助我理解为什么数据集中没有单个表国家/地区只有两列 - country_id和name?

另外,为什么在所有表格中添加了额外的列 - countries_id。

注意: - 我希望继续使用基于属性的xml文件格式。

4 个答案:

答案 0 :(得分:1)

简单地说,您可以使用XmlReader.ReadToFollowing Method

来完成
xmlFile.ReadToFollowing("countries");
DataSet ds_XMLData= new DataSet();
ds_XMLData.ReadXml(XMLFile);

答案 1 :(得分:0)

摆脱<countries />元素。如,

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Tables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <country country_id = "1" name = "Afghanistan"/>
   <country country_id = "2" name = "Albania"/>
   <country country_id = "3" name = "Algeria"/>
</Tables>

我没有DataSet专家,但我的猜测是尝试创建一个你不想要的countriescountry之间的关系。如果您可以控制XML,只需修改XML。

答案 2 :(得分:0)

我不知道为什么DataSet会创建两个表和其他列。但我认为您必须在从XML加载数据之前阅读XML模式。

DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema("countries.xsd");
dataSet.ReadXml("countries.xml");

countries.xsd

<?xml version="1.0" standalone="yes"?>
<xs:schema id="Tables" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="countries" msdata:IsDataSet="true" msdata:MainDataTable="countries" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="country">
          <xs:complexType>
            <xs:attribute name="country_id" type="xs:int" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="1"/>
            <xs:attribute name="name" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

加载架构后,DataSet的名称为countries,其中一个表名为country

答案 3 :(得分:0)

  • 有两个表,因为xml文件中有两个复杂的xml元素:<countries><country>

  • 添加附加列“countries_id”(元素的父ID)第二个表以指定该元素位于<countries>内,父ID为“countries_id”= 0。您可以在XML中再添加一个<countries>,并在第二个表值中检查“countries_id”父ID“0”和“1”。

`

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Tables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <countries>
    <country country_id = "1" name = "Afghanistan"/>
    <country country_id = "2" name = "Albania"/>
    <country country_id = "3" name = "Algeria"/>
  </countries>
  <countries>
    <country country_id = "1" name = "Afghanistan"/>
    <country country_id = "2" name = "Albania"/>
    <country country_id = "3" name = "Algeria"/>
  </countries>
</Tables>

`