读取XML文件并在.NET中选择节点

时间:2010-02-11 00:53:29

标签: c# .net xml

我有一个较重的XML文件,包含大量的树节点。我需要选择一些特定的节点(比如说Diet),其中有多个部分。

即。 Diet节点在XML中随机出现,因此我需要将节点作为Diet找到并获取其子元素并将其保存到DB中。

假设Diet不仅仅是一行,它下面有10-12个条目(可能我可以使用InnerXML获取其内容,但实际上无法逐行获取)

4 个答案:

答案 0 :(得分:1)

  1. 确保添加了对“System.xml.Linq”的引用。
  2. 剔除所有饮食元素:

    XElement wholeFile = XElement.Load(@"C:\DietSampleXML.xml");
    IEnumerable<XElement> dietElements = wholeFile.Descendants("Diet");
    
  3. 如果设置断点并将鼠标悬停在“dietElements”上并单击“结果视图”,您将看到所有Diet元素及其内部xml。

  4. 现在遍历dietElements将每个元素和/或子元素添加到您的数据库中:“foreach(XElement x in dietElements){...}”

  5. 我使用以下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); }

希望这有帮助,