如何使用XmlReader读取xml文档

本文关键字:xml 文档 读取 XmlReader 何使用 | 更新日期: 2023-09-27 18:11:36

我有一个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(),但不认为这是我需要的。
有什么建议吗?

注释中的例子对我没有帮助。我忘了我在document中有一个命名空间:

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

但是无论如何reader.ReadToFollowing("ns8:author");行不返回author节点

如何使用XmlReader读取xml文档

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
}