我知道如果你知道节点名称,可以使用C#获取任何XML节点,但我想获取根节点以便找到名称。这可能吗?
更新:我正在使用XMLTextReader读取文件的URL,然后将其加载到XMLDocument对象中。基本上,我正在尝试避免使用LINQ to XML,但如果有其他更好的方法,我一直都是一个好学生。
根节点是XmlDocument
的DocumentElement
属性
XmlElement root = xmlDoc.DocumentElement
如果你只有一个节点,你可以通过以下方法获取根节点:
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;
}
if
语句失败意味着什么。 - John SaundersXmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(response.GetResponseStream());
string rootNode = XmlDoc.ChildNodes[0].Name;
试试这个
XElement root = XDocument.Load(fStream).Root;