2016-10-04 14 views
-2

私は、XMLを持っている:XmlReaderでXML文書を読み取るには?

<doc> 
**** 
<book> 
    <author>Pete</author> 
    <rating>4</rating> 
    <pages>243</pages> 
</book> 
<shop> 
    <></> 
    <></> 
</shop> 
</doc> 

私はXmlReaderをして​​それを読むことを試みた:

using (XmlReader reader = XmlReader.Create(stream)) 
{ 
    reader.MoveToContent(); 
    //read some elements 
    reader.ReadToFollowing("book"); 

} 

しかし、私は要素 bookに会うとき、私は、私は authorの読み方を意味し、内部に移動する方法を知りません ratingなど?そして、上のレベルに再び移動して shop要素を読み取る方法。
私は ReadToDescendant()を試しましたが、私が必要としていたことは考えていません。
アドバイスはありますか?

コメントの例は私を助けませんでした。私は私が文書内の名前空間を持っていることを忘れて:

var nsmgr = new XmlNamespaceManager(reader.NameTable); 
    nsmgr.AddNamespace("ns8", "namespace uri1"); 
    nsmgr.AddNamespace("ns6", "namespace uri2"); 

そして、読み取った原稿:

using (XmlReader reader = XmlReader.Create(stream)) 
{ 
    while (reader.Read()) 
    { 
     if (reader.NodeType == XmlNodeType.Element) 
     { 
      reader.ReadToFollowing("book"); 
      reader.ReadToFollowing("ns8:author"); 
     } 
} 

しかし、いずれにせよラインreader.ReadToFollowing("ns8:author");authorノードを返しません

<doc> 
    **** 
    <book> 
     <ns8:author>Pete</ns8:author> 
     <ns8:rating>4</ns8:rating> 
     <ns8:pages>243</ns8:pages> 
    </book> 
    <shop> 
     <></> 
     <></> 
    </shop> 
</doc> 

は、だから私はNamespaceManager使用します。

+0

ノードタイプを確認し、それに基づいてより多くのロジックを定義できます。例:https://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx – Sparrow

+0

別の例を示します。https://www.dotnetperls.com/xmlreader – Sparrow

+0

http:// csharp.net-tutorials.com/xml/reading-xml-with-the-xmlreader-class/ – Sparrow

答えて

0

ReadToFollowingメソッドで正しい名前空間を指定します。

using (XmlReader reader = XmlReader.Create(stream)) 
{ 
    reader.ReadToFollowing("book"); 

    reader.ReadToFollowing("author", "uri1"); 
    var author = reader.ReadElementContentAsString(); 
    Console.WriteLine(author); 

    reader.ReadToFollowing("rating", "uri1"); 
    var rating = reader.ReadElementContentAsInt(); 
    Console.WriteLine(rating); 

    // and so on 
} 
関連する問題