删除具有特定属性的元素

时间:2014-08-04 09:23:46

标签: c# xml xpath

正如我在标题中所说:

我想在属性中没有“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

的异常

跳出它明确的另外,我会编辑它对你有利:)

1 个答案:

答案 0 :(得分:2)

您的XPath在两个方面无效:

  1. 缺少结束括号]

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

  3. 其余的代码看起来没问题,我希望一旦你纠正XPath就可以做你想做的事情。它应该是这样的:

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

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

    我想你想要的是:

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