2013-12-23 20 views
5

の一部のみが、次のXMLを考えてみましょう:解析XML

<?xml version="1.0" encoding="utf-8" ?> 
<Outer> 
    <Inner1>ABC</Inner1> 
    <Inner2>DEF</Inner2> 
</Outer> 

私は文書全体を解析せずにInner1の値( 『ABC』)を取得することができるようにしたいです。これは実際には文書がかなり長いためです。 .net(XDocument。これを手動で解析するのではなく)を使用してこれを行う方法はありますか?

答えて

7

あなたはXmlReaderを使用することができ、それは文書全体を解析しますが、(SAXパーサと同様に)、文書による前方のみのアクセスを提供していません:

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx


次のようなもの私は考えます:

using (XmlReader reader = XmlReader.Create("sample.xml")) { 

    // Move the reader to the inner1 node 
    reader.MoveToContent(); 
    reader.ReadToDescendant("Inner1"); 

    return reader.ReadElementContentAsString(); 
} 
+0

有望です。私は今それを調べている。 – ispiro

+0

これは私が探していたものですので、私は答えを受け入れています。ありがとう。 (あなたの例は、私がテストするときに '' Value ''として持っていますが、間違ってテストしているかもしれません。) – ispiro

+1

'' reader.ReadElementContentAsString(); 'を使ったときにうまくいきました。 (良いオールintellisense :))もう一度ありがとう。 – ispiro

1

あなたがそれを見つけて抽出するために必要なすべてのデータを解析する必要があります。ただし、XmlReaderを使用してこれを行うと、必要なものを見つけるとすぐに解析を中断できます。対照的に、XmlDocumentを使用すると、ドキュメント内で検索を開始する前にドキュメント全体を読み込む必要があります。