1

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

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

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

目前我jaxb.properties在 JAXB bean's 旁边使用.class,但我可以使用一些工厂选项等创建编组器。

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

4

2 回答 2

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

于 2013-06-11T15:55:55.787 回答
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

但有效。

关于命名空间,这里是关于忽略命名空间的讨论

于 2013-06-11T16:06:42.650 回答