我知道如果您知道节点名称,可以使用C#获取任何XML节点,但我想获取根节点以便我可以找到该名称。这可能吗?
更新:我正在使用XMLTextReader读取文件的URL,然后将其加载到XMLDocument对象中。基本上我是想避免使用LINQ to XML,但是如果还有另一种更好的方式,那么我总是一个好学生。
答案 0 :(得分:77)
根节点是DocumentElement
XmlDocument
属性
XmlElement root = xmlDoc.DocumentElement
如果您只有节点,则可以通过
获取根节点XmlElement root = xmlNode.OwnerDocument.DocumentElement
答案 1 :(得分:20)
我在这里得到了同样的问题。如果文档很大,使用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;
}
}
}
答案 2 :(得分:13)
同意犹太人,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;
}
答案 3 :(得分:0)
试试这个
XElement root = XDocument.Load(fStream).Root;
答案 4 :(得分:0)
string rootNode = null;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(response.GetResponseStream());
rootNode = XmlDoc.ChildNodes(0).Name;