我有一个像下面的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();
但找不到任何东西。这里有什么不对吗?谢谢。
答案 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']