任何人都可以解释为什么我不能使用此查询删除此子节点。它给出了一个错误,说“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>
答案 0 :(得分:0)
正是因为这个
Lists[contains(ListName,'ws_Users')]
您的xml包含2个名为ListName
Lists
的子节点。 contains()函数的第一个参数应该只包含一个项目。将其更改为:
Lists[ListName[contains(.,'ws_Users')]]
答案 1 :(得分:0)
未经测试的尝试:
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");
答案 2 :(得分:0)
您需要删除节点的父节点并从该父节点调用.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");