我有这个xml:
<Root>
<Client>
<Name>Some Name</Name>
<Messages>
<Type name="mail" value="a@a.com"></Type>
<Type name="chat" value="some-username"></Type>
</Messages>
</Client>
...................MORE CLIENTS HERE
</Root>
我用xmlreader循环它并且它按预期工作。
问题是当我尝试在节点"<Type"
上循环时,这是第一个代码停止的地方。
代码正确读取xml,但在嵌套while的第一次迭代后停止:
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings))
{
while (reader.ReadToFollowing("Client"))
{
reader.ReadToFollowing("Name");
var message = reader.ReadElementContentAsString();
Trace.WriteLine("message: " + message);
while (reader.ReadToFollowing("Type")){
var value = reader.GetAttribute("value");
var name = reader.GetAttribute("name");
}//everything stops here///
}
}
如何在第一位客户后继续?
感谢
答案 0 :(得分:2)
这应该有用,主要区别在于:
要解决这个问题,您需要先阅读Message
元素并为子树(ReadSubtree
)创建一个阅读器,以保存您的数据Client
节点
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings))
{
while (reader.ReadToFollowing("Client"))
{
reader.ReadToFollowing("Name");
var message = reader.ReadElementContentAsString();
//advance to <Message> element
reader.ReadToFollowing("Messages");
//create sub-tree reader to restrict the scope
var typeReader = reader.ReadSubtree();
while (typeReader.ReadToFollowing("Type"))
{
var value = reader.GetAttribute("value");
var name = reader.GetAttribute("name");
}//everything stops here///
}
}