有没有办法将Java的XPath设置为表达式的默认名称空间前缀?例如,代替:/ html:html/html:head/html:title/text()",查询可以是:/ html/head/title/text()
使用命名空间前缀时,必须有一种更优雅的方式.
我现在正在做的示例代码片段:
Node node = ... // DOM of a HTML document XPath xpath = XPathFactory.newInstance().newXPath(); // set to a NamespaceContext that simply returns the prefix "html" // and namespace URI ""http://www.w3.org/1999/xhtml" xpath.setNamespaceContext(new HTMLNameSpace()); String expression = "/html:html/html:head/html:title/text()"; String value = xpath.evaluate(query, expression);
kdgregory.. 10
很不幸的是,不行.几年前有一些关于为JxPath定义默认命名空间的讨论,但快速查看最新文档并不表示发生了任何事情.不过,您可能希望花更多时间浏览文档.
如果你真的不关心命名空间,你可以做的一件事就是在没有它们的情况下解析文档.只需省略您当前对DocumentBuilderFactory.setNamespaceAware()的调用.
另外,请注意您的前缀可以是您想要的任何内容; 它不必匹配实例文档中的前缀.所以你可以使用h
而不是html
最小化前缀的视觉混乱.
很不幸的是,不行.几年前有一些关于为JxPath定义默认命名空间的讨论,但快速查看最新文档并不表示发生了任何事情.不过,您可能希望花更多时间浏览文档.
如果你真的不关心命名空间,你可以做的一件事就是在没有它们的情况下解析文档.只需省略您当前对DocumentBuilderFactory.setNamespaceAware()的调用.
另外,请注意您的前缀可以是您想要的任何内容; 它不必匹配实例文档中的前缀.所以你可以使用h
而不是html
最小化前缀的视觉混乱.