Как я могу получить только внешнюю разметку элемента XML?
Если у меня есть XmlNode
как это
<element attribute="value">
Content
</element>
Я могу получить его InnerXml
("Content
"), но как я могу получить обратное? То есть только внешняя разметка, разделенная открывающим и закрывающим тегами:
<element attribute="value">
а также
</element>
Я хочу исключить внутренний XML, поэтому OuterXml
собственность на XmlNode
класс не подойдет.
Нужно ли создавать его вручную, захватывая каждую часть и форматируя их в строку? Если да, то, кроме имени элемента, префикса и атрибутов, какие еще свойства могут иметь элементы XML, которые я должен помнить для учета?
2 ответа
Так что, если я вас правильно понимаю, все, что вы хотите, это OuterXml
без InnerXml
, В этом случае вы можете взять внешний XML и заменить содержимое пустой строкой.
var external = xml.OuterXml.Replace(xml.InnerText, string.Empty);
Вы можете попробовать любой из этих двух вариантов, если не возражаете против изменения xmlnode:
foreach(XmlNode child in root.ChildNodes)
root.RemoveChild(child);
Console.WriteLine(root.OuterXml);
Или же
for (int i=0; i <root.ChildNodes.Count; i++)
{
root.RemoveChild(root.ChildNodes[i]);
}
Замечания:
//RemoveAll did not work since it got rid of the xml attributes which you wanted to preserve
root.RemoveAll();