我使用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表达式)。
答案 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。