C# 获取整个XML节点及其字符串中的标记

C# 获取整个XML节点及其字符串中的标记,c#,xml,xpath,C#,Xml,Xpath,给出以下XML示例 <aaa> <bbb id="1"> <ccc att="123"/> <ccc att="456"/> <ccc att="789"/> </bbb> <bbb id="2"> <ccc att="321"/> <ccc att="654"/> &l

给出以下XML示例

<aaa>
    <bbb id="1">
        <ccc att="123"/>
        <ccc att="456"/>
        <ccc att="789"/>
    </bbb>
    <bbb id="2">
        <ccc att="321"/>
        <ccc att="654"/>
        <ccc att="987"/>
    </bbb>
</aaa>
但我希望我的字符串等于

<bbb id='1'><ccc att="123"/><ccc att="456"/><ccc att="789"/></bbb>

首先,我建议不要使用
XmlDocument
。这是一种古老的技术,在处理属性等问题时,它为您提供了Linq2Xml和许多显式的强制转换功能

XDocument
方法与Linq而不是XPath结合使用,解决这个问题要容易得多:

var doc=XDocument.Load("file.xml");
var elToRemove = doc.Root.Elements("bbb").Single(el => (int)el.Attribute("id") == 1);
elToRemove.Remove();

Console.WriteLine(doc.ToString()); //no <bbb id="1">
Console.WriteLine(elToRemove.ToString()); //the full outer text of the removed <bbb>
var doc=XDocument.Load(“file.xml”);
var elToRemove=doc.Root.Elements(“bbb”).Single(el=>(int)el.Attribute(“id”)==1);
elToRemove.Remove();
Console.WriteLine(doc.ToString())//不
Console.WriteLine(elToRemove.ToString())//已删除文件的完整外部文本

我首先建议不要使用
XmlDocument
。这是一种古老的技术,在处理属性等问题时,它为您提供了Linq2Xml和许多显式的强制转换功能

XDocument
方法与Linq而不是XPath结合使用,解决这个问题要容易得多:

var doc=XDocument.Load("file.xml");
var elToRemove = doc.Root.Elements("bbb").Single(el => (int)el.Attribute("id") == 1);
elToRemove.Remove();

Console.WriteLine(doc.ToString()); //no <bbb id="1">
Console.WriteLine(elToRemove.ToString()); //the full outer text of the removed <bbb>
var doc=XDocument.Load(“file.xml”);
var elToRemove=doc.Root.Elements(“bbb”).Single(el=>(int)el.Attribute(“id”)==1);
elToRemove.Remove();
Console.WriteLine(doc.ToString())//不
Console.WriteLine(elToRemove.ToString())//已删除文件的完整外部文本

使用XmlNode的OuterXml属性

xDoc1 = new XmlDocument();
xDoc1.Load("file.xml"); // Containing the given example above.

XmlNodeList nodes = xDoc1.SelectSingleNodes("//bbb[@id='1']");

foreach (XmlNode n in nodes)
{
    XmlNode parent = n.ParentNode;
    parent.RemoveChild(n);
    Console.WriteLine(n.OuterXml);
}

使用XmlNode的OuterXml属性

xDoc1 = new XmlDocument();
xDoc1.Load("file.xml"); // Containing the given example above.

XmlNodeList nodes = xDoc1.SelectSingleNodes("//bbb[@id='1']");

foreach (XmlNode n in nodes)
{
    XmlNode parent = n.ParentNode;
    parent.RemoveChild(n);
    Console.WriteLine(n.OuterXml);
}

OP还希望在删除的元素中包含三个子节点“”,可能您应该更新您的答案以包含该子节点too@Viru我不明白你要我包括什么。被删除元素的子元素保持不变(即,当标记由于是子元素而被删除时,它们将被删除)。问题是,项目中的其他地方都使用XmlDocument,我必须继续使用它。很抱歉,我没有指定它,正在编辑我的问题。感谢您的回答,不过.OP还希望在删除的元素中包含三个子节点“”。。可能您应该更新您的回答以包含该子节点too@Viru我不明白你要我包括什么。被删除元素的子元素保持不变(即,当标记由于是子元素而被删除时,它们将被删除)。问题是,项目中的其他地方都使用XmlDocument,我必须继续使用它。很抱歉,我没有指定它,正在编辑我的问题。谢谢您的回答。请将XML视为代码,并将其缩进四个空格。谢谢。请将XML视为代码,并将其缩进四个空格。谢谢,这很有效!我很生气,因为我在一处房产可以做这件事的时候请求帮助。。。非常感谢!:)这管用!我很生气,因为我在一处房产可以做这件事的时候请求帮助。。。非常感谢!:)