我有一个较重的XML文件,包含大量的树节点。我需要选择一些特定的节点(比如说Diet),其中有多个部分。
即。 Diet节点在XML中随机出现,因此我需要将节点作为Diet找到并获取其子元素并将其保存到DB中。
假设Diet不仅仅是一行,它下面有10-12个条目(可能我可以使用InnerXML获取其内容,但实际上无法逐行获取)
答案 0 :(得分:1)
剔除所有饮食元素:
XElement wholeFile = XElement.Load(@"C:\DietSampleXML.xml");
IEnumerable<XElement> dietElements = wholeFile.Descendants("Diet");
如果设置断点并将鼠标悬停在“dietElements”上并单击“结果视图”,您将看到所有Diet元素及其内部xml。
现在遍历dietElements将每个元素和/或子元素添加到您的数据库中:“foreach(XElement x in dietElements){...}”
我使用以下xml进行了测试:
<?xml version="1.0" encoding="utf-8" ?>
<TestElement>
<Diet>
<Name>Atkins</Name>
<Colories>1000</Colories>
</Diet>
<TestElement2>
<Diet>
<Name>Donuts Only</Name>
<Calories>1500</Calories>
</Diet>
</TestElement2>
<TestElement3>
<TestElement4>
<Diet>
<Name>Vegetarian</Name>
<Calories>500</Calories>
</Diet>
</TestElement4>
</TestElement3>
</TestElement>
答案 1 :(得分:0)
在XPath中,它只是//Diet
要说更多,我需要了解您的环境。
var doc = XDocument.Load("yourfile.xml");
var nodes = from d in doc.Desendants("Diet")
select d;
foreach(var node in nodes)
{ // do stuff with node
}
答案 2 :(得分:0)
根据XML文件的结构,您可以尝试将其加载到DataSet(DataSet.ReadXML())并查看它将Diet节点放入的DataTable ...如果它解析它就可以了,那么它非常简单循环遍历DataTable并获取所有Diet节点值。
我写了一个小玩具应用程序,打开这样的XML,在树视图中列出所有DataTable,然后在网格中显示表内容。如果你想看看DataSet如何解析你的XML文件,它的VS项目文件是here或只是安装它的MSI是here。
答案 3 :(得分:0)
下面的伪代码包含XPath语句,该语句将为您提供所有将“Diet”作为父级的元素。由于它生成XmlNodeList,您可以遍历每个节点并将其保存到DB。为了性能,我会考虑合并您想要保存的内容,然后保存,而不是每行(每个条目的往返次数都不是最佳)
XmlNodeList list = xDoc.DocumentElement.SelectNodes("//*[parent::Diet]");
foreach (XmlNode entry in list)
{
DAL.SaveToDatabase(entry);
}
希望这有帮助,