Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB/MOXy:如何设置要使用的xpath impl?_Java_Xpath_Jaxb_Implementation_Moxy - Fatal编程技术网

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

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

我使用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中的名称空间?(无需重写XPath表达式)。

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

  • 属性-
    @id
  • 元素-
    地址
  • 按位置排列的元素-
    地址[1]
  • 按谓词排序的元素-
    地址[@type='mailing']
  • 元素文本-
    name/Text()
  • Text-
    Text()
  • 自我-
  • 组合-
    个人信息/姓名[2]/text()
对于命名空间限定节点,可以使用
@XmlNs
注释中定义的前缀限定XPath片段。不合格的片段将假定位于使用
@XmlSchema
指定的命名空间中


记录在案,这与莫西无关。这是我使用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
但这是有效的


关于名称空间,这里有一个。

谢谢,实际上XPath异常来自另一个地方。通过将
-XDignore.symbol.file
命令行选项传递给javac,可以消除“内部专有API”警告。(不建议这样做。)嗨,谢谢你的提问。事实上,我也在尝试做一些类似的事情,但由于某些原因,它没有按预期工作。我也尝试过这个答案中提到的事情。我尝试了这种方法和作者博客中的示例,但是
JAXB编组
@XmlPath
中仍然不能像预期的那样工作。似乎使用和不使用
@XmlPath
生成的XML是相同的。请您研究一下这个例子并给出您的答案: