C# 获取整个XML节点及其字符串中的标记
给出以下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
<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视为代码,并将其缩进四个空格。谢谢,这很有效!我很生气,因为我在一处房产可以做这件事的时候请求帮助。。。非常感谢!:)这管用!我很生气,因为我在一处房产可以做这件事的时候请求帮助。。。非常感谢!:)