如何使用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
节点
在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
}