Ответ 1
Root node - это свойство DocumentElement
XmlDocument
XmlElement root = xmlDoc.DocumentElement
Если у вас есть только node, вы можете получить root node на
XmlElement root = xmlNode.OwnerDocument.DocumentElement
Я знаю, что можно получить любой XML node с помощью С#, если вы знаете имя node, но я хочу получить root node, чтобы узнать имя. Возможно ли это?
Обновление. Я использую XMLTextReader для чтения в URL-адресе файла, а затем для загрузки в объект XMLDocument. В основном я стараюсь избегать LINQ to XML, но если есть другой, лучше, тогда я всегда хороший ученик.
Root node - это свойство DocumentElement
XmlDocument
XmlElement root = xmlDoc.DocumentElement
Если у вас есть только node, вы можете получить root node на
XmlElement root = xmlNode.OwnerDocument.DocumentElement
У меня такой же вопрос. Если документ огромен, использовать 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;
}
}
}
Согласитесь с 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;
}
Попробуйте это
XElement root = XDocument.Load(fStream).Root;
string rootNode = null;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(response.GetResponseStream());
rootNode = XmlDoc.ChildNodes(0).Name;