需要在特定实例之间插入符号

时间:2017-02-10 05:46:29

标签: xml xslt xslt-2.0

我想在链接之间插入下划线符号,并创建为不同的属性值:

我的输入xml是:

<img imageid="36" alt="water" height="250" width="400" 
class="right" src="https://irctc.com/Services/Gets/Contents/imagesv1/Images/water" />

XSL我用作:

  <xsl:template match="img">
    <xsl:element name="image">
      <xsl:attribute name="id">
        <xsl:value-of select="@imageid"/>
      </xsl:attribute>
      <xsl:attribute name="alt">
        <xsl:value-of select="@alt"/>
      </xsl:attribute>
      <xsl:attribute name="height">
        <xsl:value-of select="@height"/>
      </xsl:attribute>
      <xsl:attribute name="width">
        <xsl:value-of select="@width"/>
      </xsl:attribute>
      <xsl:attribute name="align">
        <xsl:value-of select="@class"/>
      </xsl:attribute>
      <xsl:attribute name="href">
        <xsl:value-of select="@src"/>
      </xsl:attribute>
    </xsl:element>
  </xsl:template>

输出我得到了:

 <image id="36"
 alt="water"
 height="250"
 width="400"
 align="right"
 href="https://irctc.com/Services/Gets/Contents/imagesv1/Images/water"/>

但是我需要输出,因为images-v1需要带有文件名,我需要下划线符号

预期产出:

 <image id="36"
 alt="water"
 height="250"
 width="400"
 align="right"
 href="imagesv1_water"/>

请为此提供建议。提前致谢

2 个答案:

答案 0 :(得分:0)

更改

<xsl:attribute name="href">
    <xsl:value-of select="@src"/>
  </xsl:attribute>

    <xsl:attribute name="href">
            <xsl:value-of select="tokenize(@src, '/')[position() = last()-2 or position() = last()]" separator="_"/>
    </xsl:attribute>

答案 1 :(得分:0)

您可以使用以下XSLT2.0代码:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="img">
        <xsl:variable name="src_tokens" select="tokenize(@src, '/')"/>
        <image 
                id="{@imageid}"
                alt="{@alt}"
                height="{@height}"
                width="{@width}"
                align="{@class}"
                href="{$src_tokens[7]}_{$src_tokens[9]}"
                />
    </xsl:template>

</xsl:stylesheet>

当用于属性时,大括号中的值将被计算为xpath表达式。