我有一个格式如下的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();
但是,对于如何获取其他项目中的信息,我完全感到困惑,因为它们是一个级别或更深层次。我通常的谷歌搜索没有任何使用。
答案 0 :(得分:3)
您的DataSet
将包含三个表格:
dataSet.Tables[0]
:
列itemProperty1
,itemProperty2
和item_Id
。
dataSet.Tables[1]
:
列subProp1
,subProp2
,propertyWithSubProperties1_Id
和item_Id
。
dataSet.Tables[2]
:
列deeperSubProperty1
,deepSubProperty2
和propertyWithSubProperties1_Id
。
Tables[0]
使用自动生成的Tables[1]
列与item_Id
相关联。
Tables[1]
使用自动生成的Tables[2]
列与propertyWithSubProperties1_Id
相关联。
答案 1 :(得分:1)
您是否尝试过使用XmlTextReader?
http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx
或LINQ to XML?
答案 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建议)。