如何处理microsoft xpath命名空间“bug”?

时间:2012-02-09 23:56:01

标签: c# xml xpath

使用例如SelectNodes处理带有xPath的xmlDocument时,文档中有一个行为,其中包含任何名称空间声明,我认为这是一个错误:

如果xml文档包含任何名称空间声明(例如x xmlns = .....或类似名称),则xquerry将始终为空。

一种懒惰的方法是在将xml文本加载到XmlDocumennt之前在xml文本上运行以下代码:

pg = Regex.Replace(pg, @"xmlns\s*\=\s*""[^""]*""", "");
pg = Regex.Replace(pg, @"xmlns\s*\=\s*'[^']*'", "");

我们还可以使用XmlNamespaceManager将命名空间信息写入xpath调用。我发现这两种方法都很麻烦(我通常不知道软件将使用的文档的命名空间,而且,我也不在乎)。

是否有一种易于使用的方法来禁用Microsoft的XPath解析器的这种行为,这种行为也“感觉”正确?

1 个答案:

答案 0 :(得分:4)

如果你真的不关心名称空间,那么我会说从XML中删除它们似乎是正确的。我不建议在生产环境中使用这种方法,你可能应该关心命名空间。