XDocument如何通过xpath进行搜索

时间:2014-04-11 10:24:45

标签: c# xml xpath

我有一个像下面的xml文件,我想找到属性“name”值等于“ImageListView”的节点

我写了下面的代码:

var nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1");
xpath = "//asmv1:assembly/dependency/dependentAssembly/assemblyIdentity[name='ImageListView']";
XElement ele = doc.XPathSelectElement(xpath, nsmgr);
ele.Remove();

但找不到任何东西。这里有什么不对吗?谢谢。

1 个答案:

答案 0 :(得分:3)

您的XML在此处具有默认命名空间:

<asmv1:assembly 
    ......
    xmlns="urn:schemas-microsoft-com:asm.v2" 
    ......>

因此,在默认命名空间中考虑所有没有前缀的XML元素。您需要添加指向默认命名空间URI的前缀,并在XPath中使用它:

var nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1");
nsmgr.AddNamespace("d", "urn:schemas-microsoft-com:asm.v2");
xpath = "//asmv1:assembly/d:dependency/d:dependentAssembly/d:assemblyIdentity[@name='ImageListView']";
XElement ele = doc.XPathSelectElement(xpath, nsmgr);
ele.Remove();

更新:

稍微修复了XPath。您需要使用@指向属性:... [@name='ImageListView']