Получить открытый тег XmlNode с атрибутами - PullRequest
2 голосов
/ 06 января 2010

Можно ли получить открытый тег из XmlNode со всеми атрибутами, пространством имен и т. Д.?

например.

<root xmlns="urn:..." rattr="a">
   <child attr="1">test</child>
</root>

Я хотел бы получить весь открывающий тег, точно такой же, как он получен из исходного документа XML, если это возможно, из XmlNode, а затем и закрывающего тега. Оба в виде строк.

В основном XmlNode.OuterXml без дочерних узлов.

EDIT

Чтобы уточнить, XmlNode.OuterXml на узле, который был создан с помощью приведенного выше XML, вернет весь фрагмент XML, включая дочерние узлы, в виде одной строки.

XmlNode.InnerXml в этом же фрагменте будет возвращать дочерние узлы, но не родительский узел, снова в виде одной строки.

Но мне нужен открывающий тег для фрагмента XML без дочерних узлов. И без его построения с использованием массива XmlAttribute, LocalName, Namespace и т. Д.

Это C # 3.5

Спасибо

Ответы [ 3 ]

2 голосов
/ 06 января 2010

Есть ли причина, по которой вы не можете просто сказать:

string s = n.OuterXml.Substring(0, n.OuterXml.IndexOf(">") + 1);
1 голос
/ 06 января 2010

Как насчет:

 xmlNode.OuterXML.Replace(xmlNode.InnerXML, String.Empty);

Бедное мужское решение:)

1 голос
/ 06 января 2010

Я думаю, что самым простым способом было бы вызвать XmlNode.CloneNode(false), который (согласно документам) будет клонировать все атрибуты, но не дочерние узлы. Затем вы можете использовать OuterXml - хотя это также даст вам закрывающий тег.

Например:

using System;
using System.Xml;

public class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(@"<root xmlns='urn:xyz' rattr='a'>
           <child attr='1'>test</child></root>");
        XmlElement root = doc.DocumentElement;
        XmlNode clone = root.CloneNode(false);
        Console.WriteLine(clone.OuterXml);
    }
}

Выход:

<root xmlns="urn:xyz" rattr="a"></root>

Обратите внимание, что это не может быть точно в соответствии с исходным XML-документом, с точки зрения упорядочения атрибутов и т. Д. Однако, по крайней мере, это будет эквивалент .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...