正如我在标题中所说:
我想在属性中没有“preRequisite”时删除整个元素:
(XML)First Element:
<dependency>
<dependentAssembly dependencyType="install">
</dependentAssembly>
</dependency>
(XML)第二元素:
<dependency>
<dependentAssembly dependencyType="preRequisite">
</dependentAssembly>
</dependency>
当前代码:
private void Deletepopulates()
{
filepath = "C:\Folder\Exaple.exe.manifest"
XmlDocument doc = new XmlDocument();
doc.Load(filepath);
foreach(var nodeToDelete in new List<XmlNode>(doc.SelectNodes(filepath + "[@dependencyType!='preRequisite']").Cast<XmlNode>()))
{
if (nodeToDelete != null)
{
nodeToDelete.ParentNode.RemoveChild(nodeToDelete);
}
doc.Save(filepath);
}
}
当前它只删除Child(dependencyType)但它应该删除元素(依赖),有没有办法删除依赖?
并且在:new List<XmlNode>(doc.SelectNodes(filepath + "[@dependencyType!=preRequisite").Cast<XmlNode>())
我收到了一个名为System.Xml.XPath.XPathException
跳出它明确的另外,我会编辑它对你有利:)
答案 0 :(得分:2)
您的XPath在两个方面无效:
缺少结束括号]
。
您忘记在preRequisite
附近放置单引号。实际上,preRequisite
周围没有单引号是有效的,但它不能做你想做的事情。它会搜索preRequisite
子节点并将其值与dependencyType
属性进行比较。
其余的代码看起来没问题,我希望一旦你纠正XPath就可以做你想做的事情。它应该是这样的:
filepath + "[@dependencyType!='preRequisite']"
重要提示: filepath
变量当然也必须是有效的XPath。现在它看起来像是一个文件路径,它永远不会产生有效的XPath。
我想你想要的是:
doc.SelectNodes("//dependentAssembly[@dependencyType!='preRequisite']")