Java JAXB/MOXy:如何设置要使用的xpath impl?
我使用MOXy的Java JAXB/MOXy:如何设置要使用的xpath impl?,java,xpath,jaxb,implementation,moxy,Java,Xpath,Jaxb,Implementation,Moxy,我使用MOXy的@XmlPath(“/foo/bar[@baz]”) 在应用程序的其他地方,我需要XSLT2.0,因此我在类路径中包括了Saxon HA 9.5。 但这导致XPath失败(与JDK的实现不同,无法找到节点) 如何设置MOXy使用哪种XML/XPath impl? 目前,我在jaxbbean的.class旁边使用jaxb.properties,但我可以使用一些工厂选项或类似选项创建封送器 附加问题:我认为XPath的问题在于XML文件使用名称空间,… 如何让Saxon忽略XPath
@XmlPath(“/foo/bar[@baz]”)
在应用程序的其他地方,我需要XSLT2.0,因此我在类路径中包括了Saxon HA 9.5。
但这导致XPath失败(与JDK的实现不同,无法找到节点)
如何设置MOXy使用哪种XML/XPath impl?
目前,我在jaxbbean的.class
旁边使用jaxb.properties
,但我可以使用一些工厂选项或类似选项创建封送器
附加问题:我认为XPath的问题在于XML文件使用名称空间,…
如何让Saxon忽略XPath中的名称空间?(无需重写XPath表达式)。的
@XmlPath
注释支持XPath规范的一个子集。XPath处理由MOXy本身完成。支持以下概念:
- 属性-
@id
- 元素-
地址
- 按位置排列的元素-
地址[1]
- 按谓词排序的元素-
地址[@type='mailing']
- 元素文本-
name/Text()
- Text-
Text()
- 自我-
- 组合-
个人信息/姓名[2]/text()
@XmlNs
注释中定义的前缀限定XPath片段。不合格的片段将假定位于使用@XmlSchema
指定的命名空间中
//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
但这是有效的
关于名称空间,这里有一个。谢谢,实际上XPath异常来自另一个地方。通过将
-XDignore.symbol.file
命令行选项传递给javac,可以消除“内部专有API”警告。(不建议这样做。)嗨,谢谢你的提问。事实上,我也在尝试做一些类似的事情,但由于某些原因,它没有按预期工作。我也尝试过这个答案中提到的事情。我尝试了这种方法和作者博客中的示例,但是JAXB编组
在@XmlPath
中仍然不能像预期的那样工作。似乎使用和不使用@XmlPath
生成的XML是相同的。请您研究一下这个例子并给出您的答案: