1

在我正在处理的应用程序中,有一个 XML 文档需要加载到内存中进行查询。为此,我打电话给XmlDocument.Load(string path),它一直运行良好。但是,我最近在该方法中遇到了一些奇怪的行为。

我有一个看起来像这样的生成文件(经过编辑以删除敏感数据):

*Snip*
<Info name="name2" parent="name1" modifier="A"/>
<Info name="name2" parent="name1" modifier="B"/>
<Info name="name1" modifier="A"/>
<Info name="name1" modifier="B"/>
<Info name="name3" parent="name2" modifier="A"/>
<Info name="name3" parent="name2" modifier="B"/>
*Snip*

上面有六个条目。但是,在调用 时XmlDocument.Load,只加载了 4 个条目,而将前 2 个条目排除在外。我已经通过断点和数据调试器确认了这一点。

但是,当我手动将文档中的数据重新排列为

*Snip*
<Info name="name1" modifier="A"/>
<Info name="name1" modifier="B"/>
<Info name="name2" parent="name1" modifier="A"/>
<Info name="name2" parent="name1" modifier="B"/>
<Info name="name3" parent="name2" modifier="A"/>
<Info name="name3" parent="name2" modifier="B"/>
*Snip*

所有数据均已正确加载,没有遗漏任何元素。据我所知,文档格式正确,加载时没有抛出异常。还应该注意的是,当我人为地将parent属性添加到所有条目时,它们都可以正确加载,但是如果我正确理解 XML,那应该没关系,它只会使代码中缺少的属性无效。此外,没有为任何元素指定名称空间。

这是预期的行为,还是我错过了什么?如果需要,我可以提供更多详细信息。

4

1 回答 1

1

我刚刚尝试了您的示例:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<root><Info name=\"name2\" parent=\"name1\" modifier=\"A\"/><Info name=\"name2\" parent=\"name1\" modifier=\"B\"/><Info name=\"name1\" modifier=\"A\"/><Info name=\"name1\" modifier=\"B\"/><Info name=\"name3\" parent=\"name2\" modifier=\"A\"/><Info name=\"name3\" parent=\"name2\" modifier=\"B\"/></root>");
int count = doc.SelectNodes("//root/Info").Count;

它工作得很好。它返回值 6,这是正确的数字。自己试试吧。如果它对您不起作用,那么您的安装一定有问题。但是,如果正如我所怀疑的那样,它对您确实有效,那么问题一定是其他问题。

尝试从小处着手并增加更多复杂性,直到失败。导致它的 XML 中存在其他错误,或者您从 XmlDocument 对象读取节点的方式存在错误。

于 2012-06-04T15:53:32.510 回答