XmlDocument.SelectNodes和XPath导航

时间:2017-06-12 13:59:46

标签: c# xml xpath selectnodes

我的XML代码与此类似:

  <BookStore xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Book>
    <bookGenre>Fantasy</bookGenre>
    <bookTitle>A Storm of Swords</bookTitle>
    <authorInformation>
      <authorId>12345</authorId>
      <authorName>
        <firstName>George</firstName>
        <middleInitial>R.R.</middleInitial>
        <lastName>Martin</lastName>
      </authorName>
    </authorInformation>
  </Book>
  <customer>
    <customerData />
  </customer>
</BookStore>

<customer>节点可能有也可能没有子节点,具体取决于用户输入。

我正在尝试使用XmlDocument.SelectNodes和XPath导航来选择<BookStore><customer>以及<customer>中包含的所有节点。

我一直在环顾四周,阅读XPath和.SelectNodes几个小时,但似乎还没有完全理解它们是如何工作的。有人会解释如何使用它们或如何在我的情况下使用它们?如果还有其他方法可以解决我的问题,我也会对这些问题持开放态度! (我正在使用C#)

编辑:这是我根据我阅读的内容尝试的内容

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlStr);
XmlNode root = doc.DocumentElement;

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");

XmlNodeList nodeList = root.SelectNodes("descendant::customer:child::Node");

doc.Save(Console.Out); 

1 个答案:

答案 0 :(得分:1)

试试xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication62
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            XElement customer = doc.Descendants("customer").FirstOrDefault();

            Boolean children = customer.HasElements;

        }

    }
}