【发布时间】:2016-01-13 12:21:28
【问题描述】:
请考虑以下示例 XML。我有一个类说 Dummy 包含两个字段 X 和 Y。通过 XML 解析,我想构建该类的对象列表。 X 和 Y 分别取仅在 B 父节点内部的 X 和 Y 标签的值。在 XML 中,X 和 Y 节点可能存在也可能不存在于 B 节点中。
<DOC>
<A>1</A>
<B>
<C>1</C>
<D>1</D>
<E>1</E>
<X>Hello</X>
<F>1</F>
<G>1</G>
<Y>Hi</Y>
</B>
<B>
<C>1</C>
<D>1</D>
<E>1</E>
<F>1</F>
<G>1</G>
</B>
<H>
<X>1</X> //ignore
<Y>1</Y> //ignore
</H>
<DOC>
对于上述 XML,我希望列表包含两个元素。第一组将有“Hi”,“Hello”,另一组将有“”,“”
我的 C# 解析代码看起来像这样
List<Dummy> dummyList = new List<Dummy>();
Dummy d = null;
while (xmlReader.Read())
{
if (xmlReader.IsStartElement())
{
switch (xmlReader.Name)
{
case "B":
d = new Dummy();
while(xmlReader.Name != "X")
xmlReader.Read(); // can go into infinite loop if there is no X node
xmlReader.Read();
d.X = xmlReader.Value;
while(xmlReader.Name != "Y")
xmlReader.Read(); // can go into infinite loop if there is no Y node
xmlReader.Read();
d.Y = xmlReader.Value;
dummyList.Add(d);
d = null;
break;
}
}
}
上面的代码在第一个 B 节点上工作正常,但在第二个 B 节点上失败。 请让我知道你的想法。
【问题讨论】:
-
这段代码失败了吗?请提供。
-
在您的源代码中,您首先搜索“X”,然后搜索“Y”。你是故意的吗?