2016-07-01 13 views
-1

私はグローバル変数name="cats" as="element()*を持っています。変数を作成するために使用したデータと変換したいデータは、ドキュメントのツリーの別の部分にあります。
変数にCellA、CellF、CellCという要素が含まれているとします(<Item>タグで囲まれています)。xslt変数内の特定の要素の位置を見つける

私の目標は、変数として<line>ごとに多くのセル<field>を含むテーブルのデータで次の定義済みの構造体を埋めることです(同じ順序で)。

<row> 
    <CellA> </CellA> 
    <CellB> </CellB> 
    <CellC> </CellC> 
    <CellD> </CellD> 
    <CellE> </CellE> 
    <CellF> </CellF> 
</row> 

私の考えは、名前が変数に存在する場合、各<Cell_>をチェックし、元のデータにアクセスするために、その位置を使用することです。
残念ながら、を使用することはできません。$catsには、<field>にアクセスできないため、ループしています。

他の方法で示唆されているもう1つの方法は、先行する兄弟の数を数えることです($cats = Cell_)。しかし、提案は変数に基づいていませんでした。そして(初心者のために)私はこれを行う方法を理解することができませんでした。
このようにすることは可能ですか?それを行う別の方法がありますか?

明確でない場合は、私にお知らせください。

追加情報

sourceXML

<body> 
    <line> 
     <field>data</field> 
     <field/> 
     <field/> 
    </line> 
    <line/> 
    ... 
</body> 

targetXML(上記参照)

XSLT

<xsl:variable name="cats" as="element()*"> 
    <Item>CellA</Item> 
    <Item>CellF</Item> 
    <Item>CellC</Item> 
</xsl:variable> 
<xsl:for-each select="body/line"> 
    <row> 
     <CellA> 
      *What to do here to fill it with data from source xml* 
      <xsl:variable name="pos" select="???"/> 
      <xsl:value-of select="field[$pos]"/> 
     </CellA> 
     <CellB> 
     </CellB> 
     ... 
    </row> 
+1

あなたは[mcve]を投稿できますか?私はあなたが 'index-of()'関数を使うべきだと考えていますが、正確に言うのは難しいです。 –

+0

問題をまだ解決していない場合は、例を挙げます。どうもありがとうございました。 index-of()についてはわかりませんでしたが、意図したとおりに動作します。 (あなたはそれを私が選択する答えとして掲示しますか?) –

+1

私は行いましたが、文脈がなければこれを読んでいる誰かを助けるつもりはありません。 –

答えて

0

私の考えは、の名前が 変数に存在するかどうかを確認し、その位置を使用して元のデータにアクセスすることです。

明らかに、index-of()機能を使用します。