使用选定的Xpath和for循环删除XML

Joh*_*ton 7 .net c# xml xpath xmldocument

我目前有以下代码:

XPathNodeIterator theNodes = theNav.Select(theXPath.ToString());

while (theNodes.MoveNext())
{
    //some attempts i though were close
    //theNodes.RemoveChild(theNodes.Current.OuterXml);
    //theNodes.Current.DeleteSelf();
}
Run Code Online (Sandbox Code Playgroud)

我已将xpath设置为我想要在xml中返回的内容,并且我想删除循环的所有内容.我尝试了几种删除信息的方法,但它不喜欢我的语法.我在Microsoft支持上找到了一个示例:http://support.microsoft.com/kb/317666但我想使用它而不是每个.

任何意见或问题都表示赞赏.

Ale*_*Aza 5

为什么不使用XDocument

var xmlText = "<Elements><Element1 /><Element2 /></Elements>";
var document = XDocument.Parse(xmlText);

var element = document.XPathSelectElement("Elements/Element1");
element.Remove();

var result = document.ToString();
Run Code Online (Sandbox Code Playgroud)

result将会<Elements><Element2 /></Elements>

要么:

var document = XDocument.Load(fileName);

var element = document.XPathSelectElement("Elements/Element1");
element.Remove();

document.Savel(fileName);
Run Code Online (Sandbox Code Playgroud)

[编辑]对于.NET 2,可以使用XmlDocument

XmlDocument document = new XmlDocument();
document.Load(fileName);

XmlNode node = document.SelectSingleNode("Elements/Element1");
node.ParentNode.RemoveChild(node);

document.Save(fileName);
Run Code Online (Sandbox Code Playgroud)

[编辑]

如果需要删除所有子元素和属性:

XmlNode node = document.SelectSingleNode("Elements");
node.RemoveAll();
Run Code Online (Sandbox Code Playgroud)

如果需要保留属性,但要删除元素:

XmlNode node = document.SelectSingleNode("Elements");
foreach (XmlNode childNode in node.ChildNodes)
    node.RemoveChild(childNode);
Run Code Online (Sandbox Code Playgroud)

  • @Johnston-在问题中指定.net版本是一种很好的选择。更新了答案。 (2认同)
  • @Johnston-出于好奇,选择答案时的判断是什么?我虽然提供了更多示例和详细信息,不是吗?是个人的吗?:) (2认同)

Bib*_*bhu 4

string nodeXPath = "your x path";

XmlDocument document = new XmlDocument();
document.Load(/*your file path*/);

XmlNode node = document.SelectSingleNode(nodeXPath);
node.RemoveAll();

XmlNode parentnode = node.ParentNode;
parentnode.RemoveChild(node);
document.Save("File Path");
Run Code Online (Sandbox Code Playgroud)