我的应用程序需要根据一些 XML 数据评估 XPath 表达式。表达式由用户在运行时提供。因此,我无法创建 XmlNamespaceManager
以传递给 XPathEvaluate
,因为我在编译时不知道前缀和命名空间。
是否可以在 xpath 表达式中指定 namespace 声明?
回复评论:
- XML 数据有一个默认命名空间,但可以有具有任何命名空间的嵌套元素。用户知道他使用的数据的命名空间。
- 用户提供的 xpath 表达式将针对许多 XML 文档进行评估,并且每个文档都可以为相同的命名空间拥有自己的前缀。
最佳答案
如果可以将相同的前缀绑定(bind)到不同的 namespace ,并且事先不知道前缀,那么指定此类表达式的唯一纯 XPath 方法是使用这种引用元素的形式:
someName[namespace-uri() = 'exactNamespace']
因此,一个特定的 XPath 表达式将是:
/*/a[namespace-uri() = 'defaultNS']/b[namespace-uri() = 'NSB']
/c[namespace-uri() = 'defaultNS']
关于c# - 在 XPath 表达式中声明命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4861262/