删除具有特定属性的元素

本文关键字:属性 元素 删除 | 更新日期: 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在以下两种情况下无效:

  1. 缺少右括号] .

  2. 您忘记在preRequisite周围加单引号了。实际上没有在preRequisite周围的单引号是有效的,但它不做你想做的事情。它搜索preRequisite子节点并将其值与dependencyType属性进行比较。

代码的其余部分看起来不错,我希望在纠正了XPath之后,它能执行您想要的操作。它应该看起来像这样:

filepath + "[@dependencyType!='preRequisite']"

重要:当然,filepath变量也必须是有效的XPath。现在它看起来像是保存了一个文件路径,这永远不会产生有效的XPath。

我猜你想要的就是这个:

doc.SelectNodes("//dependentAssembly[@dependencyType!='preRequisite']")