簡體   English   中英

如何使用 XmlReader 讀取 xml 文檔?

[英]How to read xml document with 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我不知道如何進入內部,我的意思是如何閱讀authorrating等? 以及如何再次移動到上層以讀取shop元素。
我試過ReadToDescendant()但不認為這是我需要的。
任何建議?

評論中的例子對我沒有幫助。 我忘了我在文檔中有一個命名空間:

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

所以我使用 NamespaceManager:

  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");
       }
}

但無論如何 line reader.ReadToFollowing("ns8:author"); 不返回author節點。

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM