删除具有特定属性的元素
本文关键字:属性 元素 删除 | 更新日期: 2023-09-27 18:16:19
正如我在标题中所说:
我想删除整个元素时,我没有得到"先决条件"的属性:
(XML)第一个元素:
<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);
}
}
目前它只删除子元素(dependencyType),但它应该删除元素(dependency),有办法删除依赖吗?
和at: new List<XmlNode>(doc.SelectNodes(filepath + "[@dependencyType!=preRequisite").Cast<XmlNode>())
得到一个异常:System.Xml.XPath.XPathException
希望它很清楚,否则我会把它编辑成对你有利的:)
您的XPath在以下两种情况下无效:
-
缺少右括号
]
. -
您忘记在
preRequisite
周围加单引号了。实际上没有在preRequisite
周围的单引号是有效的,但它不做你想做的事情。它搜索preRequisite
子节点并将其值与dependencyType
属性进行比较。
代码的其余部分看起来不错,我希望在纠正了XPath之后,它能执行您想要的操作。它应该看起来像这样:
filepath + "[@dependencyType!='preRequisite']"
重要:当然,filepath
变量也必须是有效的XPath。现在它看起来像是保存了一个文件路径,这永远不会产生有效的XPath。
我猜你想要的就是这个:
doc.SelectNodes("//dependentAssembly[@dependencyType!='preRequisite']")