我需要在xslt中获取字符串的最后一部分

时间:2013-11-20 22:51:38

标签: xml xslt xpath

您好我需要获取ID密钥,它位于href部分,就像那个

<a href="/offer/something-is-verz-incorrect-1bMo.html"> some text </a>

我需要使用xsl 1bMo来变量。

我尝试这样的事情:

<xsl:variable name="job_id3" select="str:split(substring-before(@href,'.html'), '-')[last()]"/>
<xsl:attribute name="id"><xsl:value-of select="concat($ADAPTER_ID, '/', $job_id3)"/></xsl:attribute>

我的XML输出必须如下所示:

   <job id="adapter/1bMo"">
      <str name="source">some source</str>
      <str name="title">some title</str>
...
...
   </job>

现在我的XML输出看起来像这样,这是错误的:

   <job id="adapter/something-is-verz-incorrect-1bMo">
      <str name="source">some source.sk</str>
      <str name="title">some title</str>
...
...
   </job>

但它会产生错误:URI http://exslt.org/strings无法识别外部Java类。我不知道如何修复它,任何想法如何从每个href得到1bm9?

3 个答案:

答案 0 :(得分:1)

如果您使用的是XSLT 2.0并且假设ID始终跟随最后一个短划线,则可以使用tokenize

<xsl:value-of select="tokenize(substring-before(/a/@href,'.html'),'-')[last()]"/>

输入

<a href="/offer/something-is-verz-incorrect-1bMo.html"> some text </a>

输出

1bMo

答案 1 :(得分:1)

我的问题的答案在这里:

<xsl:template name="substring-after-last">
        <xsl:param name="input" />
        <xsl:param name="marker" />
        <xsl:choose>
            <xsl:when test="contains($input,$marker)">
                <xsl:call-template name="substring-after-last">
                    <xsl:with-param name="input"
          select="substring-after($input,$marker)" />
                    <xsl:with-param name="marker" select="$marker" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$input" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

并致电模板:

<xsl:attribute name="job_id">
    <xsl:value-of select="concat($ADAPTER_ID, '/')"/>
    <xsl:call-template name="substring-after-last">
                  <xsl:with-param name="input" select="$job_id2" />
                    <xsl:with-param name="marker" select="'-'" />
            </xsl:call-template>
    </xsl:attribute>

答案 2 :(得分:0)

您可以使用此XPath构建变量:

substring-before(substring(/a/@href,string-length(/a/@href) - 8),'.')

但是它假设href总是以“.html”结尾,并且ID键总是4个字符,所以这可能根本没用:)