2016-06-28 19 views
0

:**どの要素として型指定されたXML変数にXPathクエリを適用する()* **XSLT関数の戻り値の型

私はXSLT 2.0の関数に渡された変数にXPathクエリを適用したいです。

サクソンこのエラーを返す:プログラムの

Type error at char 6 in xsl:value-of/@select on line 13 column 50 of stackoverflow_test.xslt: 
    XTTE0780: Required item type of result of call to f:test is element(); supplied value has item type text() 

この骨格は、その開発の終わりまでに、複数のXSLT関数に要素ツリーを通過することを意味する、簡略化されるが。各関数は特定の統計を抽出し、ツリーからレポートを作成します。

XPathクエリを適用すると、変数に基本要素が含まれているとみなしたいと思っています。私が{count(doc( "My XSLT tree /要素変数 ")/ a [1])}となります。

サクソンHE 9.7.0.5の使用。

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:f="f:f"> 
    <xsl:template match="/root"> 
    <xsl:variable name="first" as="element()*"> 
     <xsl:copy-of select="(./a[1])" /> 
    </xsl:variable> 
    <html> 
     <xsl:copy-of select="f:test($first)" /> 
    </html> 
    </xsl:template> 
    <xsl:function name="f:test" as="element()*"> 
    <xsl:param name="frstElem" as="element()*" /> 
    <xsl:value-of select="count($frstElem/a)" /> 
    <!-- or any XPath expression --> 
    </xsl:function> 
</xsl:stylesheet> 

いくつかの例データ

<root> 
    <a> 
     <b> 
      <c>hi</c> 
     </b> 
    </a> 
    <a> 
     <b> 
      <c>hi</c> 
     </b> 
    </a> 
</root> 

おそらく関連する質問:How to apply xpath in xsl:param on xml passed as input to xml

+1

あなたはどのような結果を期待していますか? 'b'子を持つ' a'要素を渡すと、 'count($ frstElem/a)'の結果は0になります。 –

+0

私はちょっと質問を編集しました。これは、私が正しい軌道に乗っているという確信を与えますが、コンパイラはそのことに気にしません。 –

答えて

0

あなたはf:test()$frstElemの値である順序でa要素の数を返すようにしたい場合は、代わりに(暗黙の)child::軸を使用しての

<xsl:value-of select="count($frstElem/self::a)" /> 

のようなものを使用することができます。

+0

私は少し質問を編集しました。これは私が正しい軌道に乗っているという確信を与えますが、コンパイラはそれを気にしません。 –

+0

@ P.Coltharp:OK。一般的に、エラーメッセージで苦労している場合は、**エラーメッセージを投稿してください。**私たちは、私たちが見ることができないものを手伝ってはいけません。この場合は、関数を 'element()*'型を返すものとして宣言しているので型エラーが発生しますが、関数の本体は 'text()'の値を返します( 'xsl:value- ()式は数値を与えます)。要素や数値を返すようにしますか? 'a'要素を返すには、' xsl:value-of'を ''に置き換えます。 – LarsH

+0

申し訳ありませんが、私はそれが私のXPath構文であると確信していました。レッスン** s **(複数形)が学んだ、ありがとう、ありがとう。 –

1

何をやっているが、あなたが関数にa要素に合格したことを除いて、完全に正確で、かつ関数でありますこの要素の子であるaを探し、サンプルデータで空のシーケンスを返します。

+0

私は少し質問を編集しました。これは、私が正しい軌道に乗っているという確信を与えてくれますが、コンパイラはそれを気にしません。 –