2

特定の名前空間の一部である要素を選択するのに問題があります。私の xpath 式は XMLSpy では機能しますが、Xalan ライブラリを使用すると失敗します..

<item>
   <media:content attrb="xyz">
     <dcterms:valid>VALUE</dcterms:valid>
  </media:content>
</item>

私の表現は./item/media:content/dcterms:validです。両方の名前空間定義を既に XSLT に追加しています。繰り返しますが、これは XMLSpy で正しい値を選択しますが、Xalan ライブラリを実行すると失敗します。

何か案は?

4

6 に答える 6

1

を実装しorg.apache.xml.utils.PrefixResolverてプレフィックスを名前空間 URI にマップし、使用するインスタンスにインスタンスを渡す必要がありXPathます。これにより、ドキュメント内のものとは異なるプレフィックスを XPath 式で使用できるようになります (制御できない場合があります)。

たとえば、マップのペアを使用する実装を作成できます (1 つはプレフィックス -> 名前空間 URI からマップし、もう 1 つは URI からプレフィックスにマップします)。

JAXP では、実装する同等のインターフェースはjavax.xml.namespace.NamespaceContext.

于 2008-10-12T18:22:54.043 に答える
0

XPathをどのようなコンテキストで評価しようとしていますか?(たとえば、XSLT?)がルート要素の場合、先頭の「。」:「/ item / media:content / dcterms:valid」を削除してみてください。一連のアイテムがある場合は、最初に別のスラッシュを追加してみてください:「// item / media:content / dcterms:valid」。これにより、ドキュメント構造のどこに配置されていても、その基準に一致するドキュメント内のすべてのアイテムが選択されます。

于 2008-10-10T19:41:02.547 に答える
0

XML の接頭辞は、特定の名前空間にバインドされるまで意味がありません。これは XPath 式にも当てはまります。同じ接頭辞を使用したという理由だけでは一致しません。

XPath 式に含まれるプレフィックスの完全な名前空間 URI を提供する独自の PrefixResolver クラスを作成する必要があります。

于 2008-10-11T11:28:17.813 に答える
0

local-name で XPath 選択を試行し、(オプションで) 名前空間 URI を指定できます。そして例:

/*[local-name()='NewHireList' and namespace-uri()='http://BRE.NewHireList']/*[local-name()='Record' and namespace-uri()='']

詳細については、このページを参照するか、ローカル名と XPath で Google を参照してください。

于 2008-10-12T18:42:58.590 に答える
0

XML blob の名前空間を定義しようとしましたか?

<item xmlns:dcterms="http://dcterms.example" xmlns:media="http://media.example">
   <media:content attrb="xyz">
     <dcterms:valid>VALUE</dcterms:valid>
  </media:content>
</item>

すなわち

  • xmlns:dcterms="http://dcterms.example"
  • xmlns:media="http://media.example"
于 2008-10-09T13:52:19.643 に答える
-1

おそらく、XMLSpy は 2.x XSLT 仕様を実装しており、XPath はその一部であると私は信じています。一方、Xalan はまだ 1.x です。

于 2008-10-10T17:02:36.517 に答える