繁体   English   中英

删除xml文件中具有特定值的子节点

[英]delete child node with specific value in xml file

谁能解释我为什么无法使用此查询删除此子节点。 它给我一个错误,指出“ System.Xml.dll中发生了'System.ArgumentException'类型的未处理异常。附加信息:要删除的节点不是该节点的子节点。”

        XmlDocument xDoc = new XmlDocument();
        xDoc.Load("sample.xml");
        xDoc.RemoveChild(xDoc.SelectSingleNode("//Class[@Name='ECMInstruction']/Property[@Id='2']/Lists[contains(ListName,'ws_Users')]"));
        xDoc.Save("sample.xml");

xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Root>
      <Class Name="ECMInstruction" Style="Top">
        <Entity Id="1" Name="DocumentInformation" />
        <Property Id="1">
        </Property>
        <Property Id="2">
          <Lists>
            <ListName>ws_Users</ListName>
             <ListName>dfdfdfd</ListName>
          </Lists>
        </Property>
      </Class>
    </Root>

因为这个

Lists[contains(ListName,'ws_Users')]

您的xml包含2个名为ListName of Lists子节点。 contains()函数的第一个参数应该只包含一个项目。 更改为:

Lists[ListName[contains(.,'ws_Users')]]

未经测试的尝试:

XmlDocument xDoc = new XmlDocument();
xDoc.Load("sample.xml");
var parent = xDoc.SelectSingleNode("//Class[@Name='ECMInstruction']/Property[@Id='2']/Lists");
var nodeToRemove = parent.SelectSingleNode("ListName[text() = 'ws_Users')]");
parent.RemoveChild(nodeToRemove);
xDoc.Save("sample.xml");

您需要获取要删除的节点的父节点,然后从该父节点调用.RemoveChild()

XmlDocument xDoc = new XmlDocument();
xDoc.Load("sample.xml");
var nodeTobeRemoved = xDoc.SelectSingleNode("//Class[@Name='ECMInstruction']/Property[@Id='2']/Lists/ListName[contains(.,'ws_Users')]");
nodeTobeRemoved.ParentNode.RemoveChild(nodeTobeRemoved);
xDoc.Save("sample.xml");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM