Как я могу получить только внешнюю разметку элемента 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();
Другие вопросы по тегам