2013-06-11 29 views
1

我使用MOXy的@XmlPath("/foo/bar[@baz]")JAXB/MOXy:如何設置要使用哪個xpath impl?

在應用程序的其他地方,我需要XSLT 2.0,所以我將Saxon HA 9.5包含在我的類路徑中。 但是這導致了XPath失敗(沒有找到節點,與JDK的實現不同)。

如何設置MOXy使用哪個XML/XPath impl?

目前我在JAXB bean的.class旁邊使用jaxb.properties,但是我可以用一些工廠選項或類似的方法創建編組器。

獎金的問題:我認爲使用XPath的問題是,XML文件所使用的命名空間,<deployment xmlns="urn:jboss:bean-deployer:2.0"> ...
我怎樣才能讓撒克遜人忽略的XPath命名空間? (不重寫XPath表達式)。

回答

1

EclipseLink JAXB (MOXy)@XmlPath註釋支持XPath規範的一個子集。 XPath處理由MOXy自己完成。以下概念支持:

  • 屬性 - @id
  • 元素 - address
  • 元的位置 - address[1]
  • 元的謂語 - address[@type='mailing']
  • 元素文本 - name/text()
  • 文本 - text()
  • Sel的F - .
  • 結合 - personal-info/name[2]/text()

對於命名空間限定的節點,在@XmlNs註釋中定義的前綴可以用於限定的XPath片段。假定非限定片段位於使用@XmlSchema指定的名稱空間中。

+1

謝謝,實際上,XPath異常來自不同的地方。 –

1

根據記錄,這不是莫西相關。這是我使用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

+1

您可以通過將'-XDignore.symbol.file'命令行選項傳遞給javac來消除「內部專有API」警告。 (儘管這樣做不被推薦。) – mernst