我从sql:
返回了这个xml<Keywords>
<Record CIMtrek_Keywords="Bus Dev|Ser Del|Sol Del|?" />
</Keywords>
我希望在组合框中逐个放置这些值,示例代码低于其中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可以帮助我解决这个问题。如何做到这一点,
请帮助我,
最诚挚的问候。
答案 0 :(得分: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的属性声明或者'属性名称{..}'