在我正在处理的应用程序中,需要将一个XML文档加载到内存中进行查询。要做到这一点,我打电话XmlDocument.Load(string path)
,这一直工作正常。不过,我最近遇到了一些奇怪的行为。XmlDocument.Load忽略元素?
我有一个生成的文件看起来像这样(编辑删除敏感数据):
*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个条目,而将前两个条目排除。我已经通过断点确认了这一点,并通过了数据调试器。
然而,当我手动重新排列文件中的数据是
*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,那就没有关系,它只会使代码中缺失的属性无效。此外,没有为任何元素指定名称空间。
这是预期的行为,还是我错过了什么? 如果需要,我可以提供更多细节。
原来你是对的,在别处有一个不相关的方法是删除节点。我使用你的代码来发现差异。谢谢! –