2017-03-23 8 views
2

XPath 1.0には、ノードIに基づいてXMLのどこか他のノードを参照するときに便利な便利な関数があります()現時点では 私のXMLは、このような構造を有する:XPath 2.0:現在のノードを選択する方法 - 現在利用できなくなっています

<root> 
    <book> 
     <chapter> 
      <section> 
       <para> 
        <image id="1">1.png</image> 
       </para> 
      </section> 
     </chapter> 
    </book> 
    <objects> 
     <Object> 
      <ID>1</ID> 
     </Object> 
    </objects> 
</root> 

私はブックパラノードを処理するとき、私は時々、オブジェクトノード内の情報を検索するために、このようなXPath式を使用:

Object[ID=current()/descendant::image[1]/@id] 

私のパーサーをXPath 2.0に切り替えると、この式がエラーになります(現在の関数は使用できません)。

私はいくつかの検索を行っていますが、この機能をまっすぐに置き換えることができませんでした。 1つはありますか?

答えて

2

current()関数はXPathではなくXSLTで定義されています。 XSLT 1.0,2.0,3.0スタイルシート内のXPath式で使用できますが、フリースタンディングXPathでは使用できません(非互換の拡張子を除く)。

は、XPath 2.0では、変数を使用して回避策があります:

Object[ID=current()/descendant::image[1]/@id] 

は、私は、酸素15.0でXPath/XQueryのビルダーを使用してい

for $x in descendant::image[1]/@id return Object[ID=$x] 
+0

になります。 XPath 1.0を使用するように設定すると、クエリを受け取ります。XPath 2.0を使用するように設定すると、エラーが表示されます。私はもう少しテストをします。 – Hobbes

+0

これは酸素問題です。 –

+0

@Hobbes - oXygen 16.1でその動作を再現することもできます。おそらく、[oXygen forum](https://www.oxygenxml.com/forum/)の検索/投稿を試してみてください。 –

2

current()機能は、XSLT(すべてのバージョン)でのみ使用できます。 XPath(任意のバージョン)では利用できません。

Additional Functions」セクションのcurrent()機能の説明を参照してください。

関連する問題