在我正在处理的应用程序中,有一个 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,那应该没关系,它只会使代码中缺少的属性无效。此外,没有为任何元素指定名称空间。
这是预期的行为,还是我错过了什么?如果需要,我可以提供更多详细信息。