2017-01-17 11 views
0

私はxslファイルを使用しています。これはフォームフィールドの作成に使用されます。オプション値が選択した値と同じかどうかを確認し、そのオプションフィールドに選択した属性を追加する必要があります。これは、オプションを作成するためのコードです(すべてがここで働いている、とのオプションが動的に作成されます):これはデータ値追加部分ですXSL - 属性が選択した値と等しいかどうかを確認します。

<xsl:when test="@type='select'"> 
           <xsl:attribute name="title">Select List</xsl:attribute> 
           <xsl:apply-templates select="."> 
            <xsl:with-param name="field_id" select="$field_id" /> 
            <xsl:with-param name="field_type" select="@type" /> 
            <xsl:with-param name="isEditing" select="$isEditing" /> 
           </xsl:apply-templates> 
           <xsl:element name="div"> 
            <xsl:attribute name="id"><xsl:value-of select="$field_id" /></xsl:attribute> 
            <xsl:attribute name="type">select</xsl:attribute> 
            <xsl:attribute name="class">field ui-select</xsl:attribute> 
            <xsl:element name="select"> 
             <xsl:attribute name="name"><xsl:value-of select="$field_id" /></xsl:attribute> 
             <xsl:attribute name="id"><xsl:value-of select="$field_id" /></xsl:attribute> 
             <xsl:attribute name="data-native-menu">false</xsl:attribute> 
             <xsl:attribute name="size">1</xsl:attribute> 

             <xsl:attribute name="required"> 
              <xsl:choose> 
               <xsl:when test="@required='required'">required</xsl:when> 
               <xsl:otherwise>false</xsl:otherwise> 
              </xsl:choose> 
             </xsl:attribute> 

             <xsl:attribute name="onchange">CustomJS.manageDropdownSelect(this)</xsl:attribute> 

             <xsl:attribute name="data-value"> 
              <xsl:choose> 
               <xsl:when test="@data-value!=''"> 
                <xsl:value-of select="@data-value" /></xsl:when> 
              </xsl:choose> 
             </xsl:attribute> 

             <xsl:for-each select="./options/option"> 
              <xsl:element name="option"> 

               <xsl:attribute name="value"> 
                <xsl:value-of select="." /> 
               </xsl:attribute> 

               <xsl:value-of select="." /> 

               <xsl:if test="@data-value='@value'"> 
                <xsl:attribute name="selected">selected</xsl:attribute> 
               </xsl:if> 

              </xsl:element> 
             </xsl:for-each> 
            </xsl:element> 
           </xsl:element> 

           <!-- field data --> 
           <xsl:element name="input"> 
            <xsl:attribute name="id">field_id</xsl:attribute> 
            <xsl:attribute name="type">hidden</xsl:attribute> 
            <xsl:attribute name="class">fielddata</xsl:attribute> 
            <xsl:attribute name="value"><xsl:value-of select="concat($field_id,':',@type)" /></xsl:attribute> 
           </xsl:element> 
          </xsl:when> 

<xsl:attribute name="data-value"> 
              <xsl:choose> 
               <xsl:when test="@data-value!=''"> 
                <xsl:value-of select="@data-value" /></xsl:when> 
              </xsl:choose> 
             </xsl:attribute> 

をそして、これはあります

このセクションを選択値と接続する方法を理解する必要があります:

<xsl:if test="@data-value='@value'"> 
     <xsl:attribute name="selected">selected</xsl:attribute> 
</xsl:if> 

EDIT私が取得XMLコードの

例:

<field type="select" name="" id="select_0" data-value="List 14" required="false"> 
    <options> 
     <option>List 1</option> 
     <option>List 12</option> 
     <option>List 13</option> 
     <option>List 14</option> 
     <option>List 12</option> 
     <option>List 125</option> 
    </options> 
</field> 
+0

確認するには...'

+0

すべてのオプションは問題なく作成され、selectは選択したオプションに基づいて適切にデータ値を取得しています。 – Sasha

答えて

1

問題は、あなたの文の順序です。属性は、要素の他の子ノードの前に作成する必要があります。 per the W3C specとして...

以下のすべてのエラーです:子供たちがそれに追加された後

  • は、要素に属性を追加します。実装は、エラーを通知するか、 属性を無視します。

xsl:value-ofあなたのケースでは、子テキストノードをcreatengています。

また、テストでアポストロフィでアトリビュート@valueがありました。これはリテラル文字列値 "@value"を探していました。しかし、あなたの場合、テキストノードであるノードの実際の値をチェックする必要があります。したがって、text()

さらに、data-valueは、現在のoption要素ではなく、祖先field要素の属性です。あなたがそう../../@data-value=text()ない@data-value='@value'

をやって、あなたのコードは次のようになりますする必要があります:

<xsl:element name="option"> 
    <xsl:attribute name="value"> 
      <xsl:value-of select="." /> 
    </xsl:attribute> 
    <xsl:if test="../../@data-value=text()"> 
     <xsl:attribute name="selected">selected</xsl:attribute> 
    </xsl:if> 
    <xsl:value-of select="." /> 
</xsl:element> 

ノート、ちょうど直接要素を書き出し、ここで要素を作成するxsl:elementを使用する必要はありません。あなたは、次のように単純化することができることができます:

<option value="{.}"> 
    <xsl:if test="../../@data-value=text()"> 
     <xsl:attribute name="selected">selected</xsl:attribute> 
    </xsl:if> 
    <xsl:value-of select="." /> 
</option> 

value属性を作成するAttribute Value Templatesの使用に注意してください。

+0

詳細な回答ありがとう:)これはまだ動作することを拒否しています(私は両方の例を試しました)。しかし、私は今どこから始めるべきかの出発点を持っています。 – Sasha

+0

もう一度見たいと思ったら、私はちょうど私の答えにいくつかの編集を加えました。 –

+0

作成されたXMLコードの例を追加しました。奇妙なことに、オプションにはvalue属性はありませんが、HTMLは持っています。これはこの方法であるはずですか? – Sasha

関連する問題