C#:DataSet.readXML(“filepath”)如何与我的XML文件一起使用,该文件在对象内的对象中有对象?

时间:2010-11-22 00:34:48

标签: c# .net xml dataset

我有一个格式如下的xml文件:

<items>
<item>
    <itemProperty1>Propeterty1</itemProperty1>
    <itemProperty2>Propeterty2</itemProperty2>
    <propertyWithSubProperties1>
       <subprop1>subProp1</subProp1>
       <subprop2>subProp2</subProp2>
       <deeperPropertyWithSubProperties1>
            <deeperSubProperty1>data</deeperSubProperty1>
            <deeperSubProperty2>data2</deeperSubProperty2>
       </deeperPropertyWithSubProperties1>
    </propertyWithSubProperties1>
</item>
...More items
</items>

我正在尝试使用c#中的数据集来读取此数据文件,如下所示:

DataSet dataSet = new DataSet();
dataSet.ReadXml(fileName);

我可以访问前两个没有问题的项目:

firstProperty = dataSet.Tables[0].Rows[i][0].ToString();
secondProperty = dataSet.Tables[0].Rows[i][1].ToString();

但是,对于如何获取其他项目中的信息,我完全感到困惑,因为它们是一个级别或更深层次。我通常的谷歌搜索没有任何使用。

3 个答案:

答案 0 :(得分:3)

您的DataSet将包含三个表格:

  • dataSet.Tables[0]
    itemProperty1itemProperty2item_Id

  • dataSet.Tables[1]
    subProp1subProp2propertyWithSubProperties1_Iditem_Id

  • dataSet.Tables[2]
    deeperSubProperty1deepSubProperty2propertyWithSubProperties1_Id

Tables[0]使用自动生成的Tables[1]列与item_Id相关联。

Tables[1]使用自动生成的Tables[2]列与propertyWithSubProperties1_Id相关联。

答案 1 :(得分:1)

答案 2 :(得分:1)

DataSet可能不是此嵌套层次结构的理想数据结构。您是否考虑过直接阅读XML?这可以按如下方式完成:

XmlDocument d = new XmlDocument();
d.Load("XmlFile1.xml");

XmlElement items = d.DocumentElement;//(XmlElement)d.GetElementById("items");
XmlElement item = (XmlElement)items.ChildNodes[0];
XmlElement itemProperty1 = item["itemProperty1"]; 
XmlElement itemProperty2 = item["itemProperty2"];
XmlElement propertyWithSubProperties1 = item["propertyWithSubProperties1"];
XmlElement subProp1 = propertyWithSubProperties1["subprop1"];
XmlElement subProp2 = propertyWithSubProperties1["subprop2"];
XmlElement deeperPropertyWithSubProperties1 = propertyWithSubProperties1["deeperPropertyWithSubProperties1"];
XmlElement deeperSubProperty1 = deeperPropertyWithSubProperties1["deeperSubProperty1"];
XmlElement deeperSubProperty2 = deeperPropertyWithSubProperties1["deeperSubProperty2"];

Console.WriteLine(itemProperty1.InnerText);
Console.WriteLine(itemProperty2.InnerText);
Console.WriteLine(subProp1.InnerText);
Console.WriteLine(subProp2.InnerText);
Console.WriteLine(deeperSubProperty1.InnerText);
Console.WriteLine(deeperSubProperty2.InnerText);
Console.ReadKey();

这不是处理XML文档的“最佳”方式,但它可能更类似于您尝试的DataSet方法。其他选项是使用XmlTextReader或LINQ to XML(由@TomS建议)。