如果长度大于15,则xslt使用最后15个字符

时间:2018-12-04 01:43:55

标签: xml xslt xpath

希望有人可以对此提供帮助,我希望我对它有所解释,以便有人能够理解。

基本上在要发送的xml文件中有一个标签“ InvBatchNr”,该值的长度可以是任何值,但是我尝试上传到的系统只能接受15个字符,所以我想要样式表处理这种情况。

因此,如果“ InvBatchNr”的长度大于15个字符,则采用最后15个字符,如果不大于15个字符,则使用“ InvBatchNr”的整个值

示例: XML包含

<InvBatchNr>A00006_54324033_PRIMA01ES</InvBatchNr>

在此示例中,要使用样式表,我要提取“ 24033_PRIMA01ES”

这是我到目前为止尝试过的

<xsl:choose>
<xsl:when test="string-length('InvBatchNr') &gt; 15">
<xsl:value-of select="substring('InvBatchNr', string-length('InvBatchNr'), -15)"/>
</xsl:when>
<xsl:otherwise>
    <xsl:value-of select='InvBatchNr'/>
</xsl:otherwise>
</xsl:choose>

尽管这没有给我任何错误,但返回的值实际上为空白。 任何我要出错的指针都很好

预先感谢 艾伦

1 个答案:

答案 0 :(得分:1)

如果要引用元素,则InBatchNr的元素名称不应带有引号。您的示例选择的是字符串文字而不是XPath来选择名为InBatchNr的元素。将string-length('InvBatchNr') &gt; 15更改为string-length(InvBatchNr) &gt; 15,然后在子字符串内部进行调整。

如果要选择最后15个字符中的substring(),则第二个参数应该是字符起始位置。您是说从string-length()的位置开始,然后继续-15个字符。

相反,您想从string-length(InBatchNr) - 14开始,然后要么指定读取15个字符,要么不指定第三个参数,以便它读取到字符串的末尾。

<xsl:choose>
  <xsl:when test="string-length(InvBatchNr) &gt; 15">
    <xsl:value-of select="substring(InvBatchNr, string-length(InvBatchNr) - 14)"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="InvBatchNr"/>
  </xsl:otherwise>
</xsl:choose>