1

sql から返されたこの xml があります。

<Keywords>
  <Record CIMtrek_Keywords="Bus Dev|Ser Del|Sol Del|?" />
</Keywords>

そして、これらの値をコンボボックスに1つずつ入れたいのですが、サンプルコードは以下のとおりで、1つずつIncrease and Decrease持ちたいのと同じ方法で値を取得していますBus Dev and Ser Del and Sol Del and ?

<select size="1" style="width:60%;" name="CIMtrek_CI_CER_Type"
                                                id="CIMtrek_CI_CER_Type">
                                                <option value="0">Select Fund Type</option>
                                                <option value="Increase">
                                                    <xsl:if test="//Record/CIMtrek_CI_CER_Type/text()='Increase'">
                                                        <xsl:attribute name="selected">true</xsl:attribute>
                                                    </xsl:if>
                                                    Increase
                                                </option>
                                                <option value="Decrease">
                                                    <xsl:if
                                                        test="//Record/CIMtrek_CI_CER_Type/text()='Decrease'">
                                                        <xsl:attribute name="selected">true</xsl:attribute>
                                                    </xsl:if>
                                                    Decrease
                                                </option>
                                            </select>

これは、SQLクエリから生成されたxmlにある値からコンボボックスを作成する方法です:

<xsl:for-each select="//CIMtrek_CarrierName/Record">
                                                    <option>
                                                        <xsl:if
                                                            test="//Record/CIMtrek_RegWhseCo_Carrier/text()=@CIMtrek_CarrierName">
                                                            <xsl:attribute name="selected">true</xsl:attribute>
                                                        </xsl:if>
                                                        <xsl:attribute name="value"><xsl:value-of
                                                            select="@CIMtrek_CarrierName" />!@#$%^*!<xsl:value-of
                                                            select="@Carrier_LateContacts" />!@#$%^*!<xsl:value-of
                                                            select="@Carrier_Contacts1" />!@#$%^*!<xsl:value-of
                                                            select="@Carrier_Contacts2" />!@#$%^*!<xsl:value-of
                                                            select="@Carrier_Contacts3" /></xsl:attribute>
                                                        <xsl:value-of select="@CIMtrek_CarrierName" />
                                                    </option>
                                                </xsl:for-each>

BeniBelaの回答では、上記のコードのように、物事を入れることができません。

BeniBela がそれを理解するのを手伝ってくれることを願っています。

これを行う方法、

私を助けてください、

よろしくお願いします。

4

1 に答える 1

2

tokenize()関数はまさにこれを行います。正規表現を使用するため、次のよう|にエスケープする必要があることに注意してください[|]

for $o in /Keywords/Record/tokenize(@CIMtrek_Keywords, "[|]") return
  <option value="{$o}">{$o}</option>

その新しい xml は、次のように xquery に変換できます。

for $r in //CIMtrek_CarrierName/Record return  $r/
  <option value="{@CIMtrek_CarrierName}!@#$%^*!{@Carrier_LateContacts}!@#$%^*!{@Carrier_Contacts1}!@#$%^*!{@Carrier_Contacts2}!@#$%^*!{@Carrier_Contacts3}">
  {  if (//Record/CIMtrek_RegWhseCo_Carrier/text()=@CIMtrek_CarrierName) then attribute selected { "true" } else (),
     data(@CIMtrek_CarrierName)  }
  </option>

最初の $r/ はコンテキストを変更するため、すべての属性アクセスの前に $r/ を記述する必要はありません。xsl:value-of は {..} になり、xsl:attribute は xml のような属性宣言または「属性名」になります。 {..}'

于 2013-02-19T10:55:53.033 に答える