我有一个如下所示的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/