ノード名を知っていればC#を使ってXMLノードを取得することは可能ですが、名前を見つけるためにルートノードを取得したいと思います。これは可能ですか?C#でXMLルートノードを取得するにはどうすればよいですか?
更新:XMLTextReaderを使用してファイルのURLを読み込み、XMLDocumentオブジェクトに読み込みます。基本的に私はLINQ to XMLを避けようとしていますが、他に良い方法があれば、いつも良い学生です。
ノード名を知っていればC#を使ってXMLノードを取得することは可能ですが、名前を見つけるためにルートノードを取得したいと思います。これは可能ですか?C#でXMLルートノードを取得するにはどうすればよいですか?
更新:XMLTextReaderを使用してファイルのURLを読み込み、XMLDocumentオブジェクトに読み込みます。基本的に私はLINQ to XMLを避けようとしていますが、他に良い方法があれば、いつも良い学生です。
ルートノードは、あなただけのノードを持っている場合、あなたは私がここに同じ質問を得た
XmlElement root = xmlNode.OwnerDocument.DocumentElement
ありがとうございます。私はそれを試みるでしょう。また、XmlDocumentのルートが.DocumentElementの場合、rootの子はすべてroot.DocumentElementですか? –
いいえ.DocumentElementはXmlDocumentのプロパティのみですが、rootの子はxmlNodeなので、このプロパティはありません。そのため、.OwnerDocumentを使ってルートを取得します。 – CharlesB
驚くべき答え!私は私を救うために@CharlesBに十分に感謝できない!私はこれを何度もアップヴォートすることができれば幸いです。 – async
でルートノードを取得することができ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;
}
}
}
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'文が失敗した場合の意味を教えてください。 –
これが決してヒットしない場合、ファイルの内容には要素がありません。ファイルの最後まで読み込まれ、rootNodeNameは設定されません。 – WestDiscGolf
それは正しいです。 http://msdn.microsoft.com/ - それは整形式ではありませんか、多分ところであなたはXmlReaderSettingsを使用して無効にすることができDTD宣言を(持っている原因、さらにあなたが最初の場所でXMLをパースに問題があることができ、それを取るために en-us/library/z2adhb2f(v = VS.100).aspxなど)。そうすれば、おそらくtry-catchを使って解析全体をラップする必要がありますが、それは本当に別の主題です。空白またはヌルのルートノード名(String.IsNullOrEmpty()メソッド) –
どのようにXMLドキュメントを取得しているこの
XElement root = XDocument.Load(fStream).Root;
Load()がvoidを返す – Nick
ハァッ? 'XDocument'を返します。 'public static XDocument Load(Stream stream);' -System.Xml.Linq.XDocument(System.Xml.Linq.dll) –
を試してみてください? – Oded
あなたはXMLを解析するために何を使用していますか? –