2010-12-21 7 views
41

ノード名を知っていればC#を使ってXMLノードを取得することは可能ですが、名前を見つけるためにルートノードを取得したいと思います。これは可能ですか?C#でXMLルートノードを取得するにはどうすればよいですか?

更新:XMLTextReaderを使用してファイルのURLを読み込み、XMLDocumentオブジェクトに読み込みます。基本的に私はLINQ to XMLを避けようとしていますが、他に良い方法があれば、いつも良い学生です。

+1

を試してみてください? – Oded

+1

あなたはXMLを解析するために何を使用していますか? –

答えて

68

ルートノードは、あなただけのノードを持っている場合、あなたは私がここに同じ質問を得た

XmlElement root = xmlNode.OwnerDocument.DocumentElement 
+0

ありがとうございます。私はそれを試みるでしょう。また、XmlDocumentのルートが.DocumentElementの場合、rootの子はすべてroot.DocumentElementですか? –

+1

いいえ.DocumentElementはXmlDocumentのプロパティのみですが、rootの子はxmlNodeなので、このプロパティはありません。そのため、.OwnerDocumentを使ってルートを取得します。 – CharlesB

+0

驚くべき答え!私は私を救うために@CharlesBに十分に感謝できない!私はこれを何度もアップヴォートすることができれば幸いです。 – async

20

でルートノードを取得することができXmlDocument

XmlElement root = xmlDoc.DocumentElement 

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; 
     } 
    } 
    } 
11

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; 
} 
+0

'if'文が失敗した場合の意味を教えてください。 –

+0

これが決してヒットしない場合、ファイルの内容には要素がありません。ファイルの最後まで読み込まれ、rootNodeNameは設定されません。 – WestDiscGolf

+0

それは正しいです。 http://msdn.microsoft.com/ - それは整形式ではありませんか、多分ところであなたはXmlReaderSettingsを使用して無効にすることができDTD宣言を(持っている原因、さらにあなたが最初の場所でXMLをパースに問題があることができ、それを取るために en-us/library/z2adhb2f(v = VS.100).aspxなど)。そうすれば、おそらくtry-catchを使って解析全体をラップする必要がありますが、それは本当に別の主題です。空白またはヌルのルートノード名(String.IsNullOrEmpty()メソッド) –

0

どのようにXMLドキュメントを取得しているこの

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

Load()がvoidを返す – Nick

+0

ハァッ? 'XDocument'を返します。 'public static XDocument Load(Stream stream);' -System.Xml.Linq.XDocument(System.Xml.Linq.dll) –

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

この質問はVBには関係しません。 – Bikku

+0

@GoodBadandUgly - Converted – nesomis

+0

@nesomisありがとうございました - あなたの答えは私にとって有益でした。マイナーノート:ChildNodesはプロパティです。 – Sam

関連する問題