我有一个如下所示的xml文件,我想找到属性“名称”值等于“ 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();


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

最佳答案

您的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']

关于c# - XDocument如何通过xpath搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23009957/

10-16 07:50