Java XPath和SimpleNamespaceContext用于未知前缀的情况

时间:2016-04-01 10:38:49

标签: java xml xpath namespaces

我的Java程序将接受想要选择一组特定CAP警报的订户的XPath表达式,所有这些都是针对CAP架构版本1.1或1.2有效的XML文件。我的程序将运行组合的XPath表达式作为XPath求值。但是,订户不知道在所有CAP警报中使用了什么名称空间前缀,有些不使用前缀。

我们可以坚持认为订阅者使用相当混乱的“本地名称”方法组成XPath表达式。例如,这里是在“language”元素上选择等于“en”的表达式:

/ [本地名称()= '警报'] / [本地名称()= '信息'] / * [本地名称()= '语言'] [。=成 'en']

顺便说一下,为了严格防止名称冲突,应该在另一个只选择与CAP namespaceuri相匹配的元素的表达式前面加上这个混乱:

// [namespace-uri()='urn:oasis:names:tc:emergency:cap:1.1']或// [namespace-uri()='urn:oasis:名:TC:紧急:盖:1.2' ]

我需要的是最简单的语法,警告订阅者可以使用它来为我的程序提供XPath过滤器表达式,即使前缀未知。

我对tomaj建议的SimpleNamespaceContext很感兴趣,但我无法弄清楚它是否适用于这种情况,也不知道如何实现它。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您拥有XPath 2.0或更高版本,则可以使用以下语法:

/*:alert/*:info/*:language[.= 'en']