我的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很感兴趣,但我无法弄清楚它是否适用于这种情况,也不知道如何实现它。
非常感谢任何帮助!
答案 0 :(得分:0)
如果您拥有XPath 2.0或更高版本,则可以使用以下语法:
/*:alert/*:info/*:language[.= 'en']