JAXB / MOXy:如何设置要使用的xpath?

时间:2013-06-11 15:38:53

标签: java xpath jaxb implementation moxy

我使用MOXy的@XmlPath("/foo/bar[@baz]")

在应用程序的其他地方我需要XSLT 2.0,所以我在我的类路径中包含了Saxon HA 9.5。 但是这导致XPath失败(与JDK的实现不同,找不到节点)。

如何为MOXy设置要使用的XML / XPath?

目前我在JAXB bean的jaxb.properties旁边使用.class,但是我可以用一些工厂选项等创建marshaller。

加分问题:我认为XPath的问题是XML文件使用名称空间,<deployment xmlns="urn:jboss:bean-deployer:2.0"> ...
如何让Saxon忽略XPath中的命名空间? (不重写XPath表达式)。

2 个答案:

答案 0 :(得分:1)

EclipseLink JAXB (MOXy)@XmlPath注释支持XPath规范的子集。 XPath处理由MOXy本身完成。支持以下概念:

  • 属性 - @id
  • 元素 - address
  • 按位置排列的元素 - address[1]
  • 谓词元素 - address[@type='mailing']
  • 元素文字 - name/text()
  • 文字 - text()
  • 自我 - .
  • 组合 - personal-info/name[2]/text()

对于名称空间限定的节点,@XmlNs注释中定义的前缀可用于限定XPath片段。假定未限定的片段位于使用@XmlSchema指定的命名空间中。

答案 1 :(得分:1)

记录中,这与MOXy无关。这是我使用XPath的代码。所以我最终得到了

//XPathFactory xpf = XPath xp = XPathFactory.newInstance();
//XPathFactory xpf = new net.sf.saxon.xpath.XPathFactoryImpl();
XPathFactory xpf = new com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl();

这会抱怨

com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl is internal proprietary API and may be removed in a future release

但是有效。

关于名称空间,这里是discussion on ignoring namespaces