3

これは私が英語で表現するのはちょっと難しいので、例が役立つかもしれません。いくつかの用語で構成される文と呼ばれる要素がいくつかあるとしましょう。XMLの別の部分には、言語コードを持つ要素のセットがあります。すべての文に言語の数だけテンプレートを適用し、適切な言語コードでそのテンプレートを呼び出したいと思います。これから:

<description>
    <sentences>
        <sentence>
            <term type="adjective">nice</term>
            <term type="tripType">cycling</term>
        </sentence>
        <sentence>
            <term type="adjective">boring</term>
            <term type="tripType">hike</term>
        </sentence>
    </sentences>
    <languages>
        <l>cs</l>
        <l>en</l>
    </languages>
</description>

私はこのようなものを作りたいです:

<div>
 <p><span>cs</span> nice cycling</p>
 <p><span>en</span> nice cycling</p>
</div>

<div>    
 <p><span>cs</span> boring hike</p>
 <p><span>en</span> boring hike</p>
</div>

私は使用しようとしていまし<xsl:for-each select="/description/languages/l">たが、それは現在の要素としての内容を設定し、l私はもう用語のものに到達することができません。

どんなアイデアでも大歓迎です。ありがとう

4

3 に答える 3

1
<xsl:template match="description">
  <xsl:apply-templates select="sentences/sentence" />
</xsl:template>

<xsl:template match="sentence">
  <xsl:variable name="terms" select="term" />
  <div>
    <xsl:for-each select="../../languages/l">
      <p>
        <span><xsl:value-of select="." /></span>
        <xsl:apply-templates select="$terms" />
      </p>
    <xsl:for-each>
  </div>
</xsl:template>

<xsl:template match="term">
  <xsl:apply-templates select="." />
  <xsl:if test="position() &lt; last()"> </xsl:if>
</xsl:template>
于 2012-05-03T08:49:44.723 に答える
1

この単純な変換(明示的な条件なし)

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="sentence">
  <xsl:variable name="vSentence" select="."/>
  <div>
       <xsl:for-each select="/*/languages/l">
         <p>
           <span><xsl:value-of select="."/></span>
           <xsl:apply-templates select="$vSentence/term"/>
         </p>
       </xsl:for-each>
     </div>
 </xsl:template>

 <xsl:template match="term[position() > 1]">
  <xsl:text> </xsl:text>
  <xsl:value-of select="."/>
 </xsl:template>
 <xsl:template match="l"/>
</xsl:stylesheet>

提供されたXMLドキュメントに適用した場合

<description>
    <sentences>
        <sentence>
            <term type="adjective">nice</term>
            <term type="tripType">cycling</term>
        </sentence>
        <sentence>
            <term type="adjective">boring</term>
            <term type="tripType">hike</term>
        </sentence>
    </sentences>
    <languages>
        <l>cs</l>
        <l>en</l>
    </languages>
</description>

必要な正しい結果を生成します

<div>
   <p><span>cs</span>nice cycling</p>
   <p><span>en</span>nice cycling</p>
</div>
<div>
   <p><span>cs</span>boring hike</p>
   <p><span>en</span>boring hike</p>
</div>
于 2012-05-03T12:43:23.150 に答える
0

現在の要素(私が正しく理解している場合は、用語stuff)を変数に割り当ててから、その変数をfor-eachループで使用できます。<xsl:variable name="term" select="current()"/>

于 2012-05-03T08:32:52.303 に答える