从子字符串设置输入值

时间:2015-01-02 03:11:25

标签: xslt xslt-1.0

这是我的xsl(xslt 1.0)

<tr>
    <td align="center" height="60">
          <input type="hidden" id="imageA" value="{Item}"/>
      <div id="barcode" class="barcode"></div>
    </td>
</tr>

value =“{Item}”是一个字符串。

item1;item2;item3;item4;

如何只获得'item3'?

这将传递给JavaScript以生成条形码。目前,条形码能够显示简单的字符串。

2 个答案:

答案 0 :(得分:2)

您可以使用:

substring-before(substring-after(substring-after(Item, ';'), ';'), ';')

提取以分号分隔的字符串的第三个值。

或者,如果使用Xalan-J处理器(或支持EXSLT str:tokenize() function的其他处理器):

str:tokenize(Item, ';')[3]

答案 1 :(得分:1)

XSLT 1.0仅允许不可变变量。您可以对包含“value”属性数据的变量使用递归。

  <xsl:template match="/*">
    <root>
      <xsl:variable name="data" select="td/input/@value"/>
      <xsl:call-template name="find">
        <xsl:with-param name="count" select="1"/>
        <xsl:with-param name="data" select="substring-after($data,';')"/>
        <xsl:with-param name="prevData" select="substring-before($data,';')"/>
      </xsl:call-template>
    </root>
  </xsl:template>
  <xsl:template name="find">
    <xsl:param name="count"/>
    <xsl:param name="data"/>
    <xsl:param name="prevData"/>
    <xsl:if test="$count=3">
      <data>
        <xsl:value-of select="$prevData"/>
      </data>
    </xsl:if>
    <xsl:if test="$count &lt; 3">
      <xsl:call-template name="find">
        <xsl:with-param name="count" select="$count+1"/>
        <xsl:with-param name="data" select="substring-after($data,';')"/>
        <xsl:with-param name="prevData" select="substring-before($data,';')"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

希望这会有所帮助 如果第三个单词不是您每次所需的单词,那么您需要的数据可以告诉您需要哪个单词并相应地更改查找模板中的数字以满足您的需要