【发布时间】:2018-04-06 14:15:04
【问题描述】:
假设我有以下 Xml:
<Sections>
<Section>
<Item>
<Field> myfield </Field>
<Field> myfield </Field>
</Item>
<Item>
<Field> myfield </Field>
<Field> myfield </Field>
</Item>
</Section>
<Section>
<Item>
<Field> myfield </Field>
<Field> myfield </Field>
</Item>
</Section>
</Sections>
现在我想要的是循环浏览部分,并分别处理每个项目,所以我想做如下的事情:
reader.ReadToDescendant("Section")
do
{
Console.WriteLine("Section");
reader.ReadToDescendant("Item");
do
{
var element = (XElement)XNode.ReadFrom(reader);
foreach (XElement el in element.Elements())
{
Console.WriteLine(el.Value);
}
}while(reader.ReadToNextSibling("Item"));
}while (reader.ReadToNextSibling("Section"))
我的问题是。如果我对 Item 节点重复相同的 do-while 循环,阅读器会在找到结束的 Section 标记时停止还是在所有 xml 中搜索?我应该在内部循环之前使用 reader.ReadSubtree() 吗?
请注意,我不是在寻找像“使用 XDocument”这样的标准答案。我知道 dom 比较好用,但是不适合我的情况
【问题讨论】:
-
听起来您可以轻松测试自己
-
坦率地说,我在这里能给出的唯一好答案是:“小心”。我一直都在使用序列化 API,而
XmlReader是遥遥无期最尴尬的一个 - 找出哪些操作将读者引导到通常的位置一个案件审判和Exception。 -
@MarcGravell 这就是我问的原因。老实说,我发现 msdn 上有关 XmlReader 方法的文档非常令人沮丧,而且我很难弄清楚哪种方法更合适以及何时更合适。我正在寻找比我更有经验的人来澄清一些事情
-
@DanieleSartori 好吧,基于多年使用这些 API 的经验,我可以准确地澄清两件事:1)你没有错 - 文档不清楚,2)API 使用起来很尴尬