如何在C#中使用SelectNodes从XmlDocument访问具有特殊字符的XML节点

时间:2018-12-12 09:51:31

标签: c# xmldocument

我有以下XML:

<Doc>
 <Entries>
  <Entry>
    <RowA>Test</RowA>
    <RowB>Hello</RowB>
    <Row:C>Try to Access me </Row:C>
  </Entry>

  <Entry>
    <RowA>Try Again</RowA>
    <RowB>Hello2</RowB>
    <Row:C>Try to Access me again </Row:C>
  </Entry>

  </Entries>
</Doc>

按照我的代码,除了Row:C之外,一切都正常运行

XmlNodeList xmlNodeList = xmlFile.SelectNodes("Doc/Entries/Entry");

foreach (XmlNode xmlNode in xmlNodeList)
{
 String _Ok = xmlNode.SelectSingleNode("RowA").InnerText;
 String _Error = xmlNode.SelectSingleNode("Row:C").InnerText;  // ERROR
}

出现以下错误:

需要名称空间管理器或XsltContext。该查询具有前缀,变量或用户定义的函数。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您的xml包含名称空间,因此您需要使用XmlNamespaceManager来解析XPath表达式中前缀的名称空间。

class Program
{
    static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();

        doc.Load(@"Path to your xml file");

        XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
        ns.AddNamespace("Row", "http://www.namespace.com/");    // <= Replace your namespace here that start with "xmlns:Row="http://www.namespace.com/"" in root of document
        XmlNodeList nodes = doc.SelectNodes("//Doc//Entries//Entry//*", ns);

        foreach (XmlNode node in nodes)
        {
            Console.WriteLine(node.InnerText);
        }

        Console.ReadLine();
    }
}

输出:

enter image description here