1

私はMOXy'sを使っています@XmlPath("/foo/bar[@baz]")

アプリの他の場所では XSLT 2.0 が必要なので、クラスパスに Saxon HA 9.5 を含めました。しかし、それが原因で XPath が失敗しました (JDK の実装とは異なり、ノードが見つかりません)。

どのXML / XPath implを使用するかをMOXyに設定するにはどうすればよいですか?

現在jaxb.properties、JAXB bean の横に使用.classしていますが、マーシャラーをいくつかのファクトリ オプションなどで作成してもかまいません。

おまけの質問: XPath の問題は、XML ファイルが名前空間を使用していることだと思います。Saxon が XPath で<deployment xmlns="urn:jboss:bean-deployer:2.0"> ...
名前空間を無視するようにするにはどうすればよいですか? (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 に答える