Подтвердить что ты не робот

Как получить корень XML node с помощью С#?

Я знаю, что можно получить любой XML node с помощью С#, если вы знаете имя node, но я хочу получить root node, чтобы узнать имя. Возможно ли это?

Обновление. Я использую XMLTextReader для чтения в URL-адресе файла, а затем для загрузки в объект XMLDocument. В основном я стараюсь избегать LINQ to XML, но если есть другой, лучше, тогда я всегда хороший ученик.

4b9b3361

Ответ 1

Root node - это свойство DocumentElement XmlDocument

XmlElement root = xmlDoc.DocumentElement

Если у вас есть только node, вы можете получить root node на

XmlElement root = xmlNode.OwnerDocument.DocumentElement

Ответ 2

У меня такой же вопрос. Если документ огромен, использовать XmlDocument не рекомендуется. Дело в том, что первым элементом является корневой элемент, на основе которого XmlReader может использоваться для получения корневого элемента. Использование XmlReader будет намного более эффективным, чем использование XmlDocument, поскольку оно не требует загрузки всего документа в память.

  using (XmlReader reader = XmlReader.Create(<your_xml_file>)) {
    while (reader.Read()) {
      // first element is the root element
      if (reader.NodeType == XmlNodeType.Element) {
        System.Console.WriteLine(reader.Name);
        break;
      }
    }
  }

Ответ 3

Согласитесь с Jewes, XmlReader - лучший способ пойти, особенно если вы работаете с большим XML-документом или обрабатываете несколько в цикле - нет необходимости разбирать весь документ, если вам нужен только корень документа.

Здесь упрощенная версия, использующая XmlReader и MoveToContent().

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.movetocontent.aspx

using (XmlReader xmlReader = XmlReader.Create(p_fileName))
{
  if (xmlReader.MoveToContent() == XmlNodeType.Element)
    rootNodeName = xmlReader.Name;
}

Ответ 4

Попробуйте это

XElement root = XDocument.Load(fStream).Root;

Ответ 5

string rootNode = null;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(response.GetResponseStream());
rootNode = XmlDoc.ChildNodes(0).Name;