首页 > 解决方案 > LINQ to XML 选择带前缀的根元素

问题描述

我有一个简单的 xml 文档

<n1:data xmlns:n1="http://test.com/types" xmlns="http://test.com/basic" xmlns:n2="http://test.com/value">
  <n2:value>Test</n2:value>
</n1:data>

我需要根据我从外部代码收到的 XPath 查询来选择其中的元素。除根元素外,选择工作正常。这是我用于元素选择的代码

    NameTable nameTable = new NameTable();
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(nameTable);
    nsmgr.AddNamespace("n1", "http://test.com/types");
    nsmgr.AddNamespace("n2", "http://test.com/value");

    var xpathQueryN1 = "//n1:data";
    var xpathQueryN2 = "//n2:value";

    var elementN1 = xmlContent.XPathSelectElement(xpathQueryN1, nsmgr);
    var elementN2 = xmlContent.XPathSelectElement(xpathQueryN2, nsmgr);

第一个xpathQuery将返回null,第二个将返回一个元素。我也尝试过像这样的查询

var xpathQueryN1 = "./n1:data";
var xpathQueryN1 = "n1:data";

但他们都不会返回data元素。唯一的方法是使用

var xpathQueryN1 = ".";

为什么显式 xpathn1:data不起作用?

标签: c#xpathlinq-to-xml

解决方案


推荐阅读