您好我需要获取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?
答案 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个字符,所以这可能根本没用:)