我有一个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()
,但不要认为我需要它
有什么建议吗?
评论中的例子没有帮助我。我忘记了文档中有一个名称空间:
<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
节点。
答案 0 :(得分: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
}