如何每次仅从具有可变字符长度的子字符串中获取最后4个字符

时间:2019-05-16 10:01:58

标签: xml xslt xslt-1.0

我正在优化xml的发票,我只希望变量的最后4个字符。对于我收到的每个发票,该变量的字符长度可以不同,但​​是结果只希望最后4个字符。

我已经用子字符串代码尝试过了,但是然后我需要给出一个特定的长度,该代码需要从中获取最后4个字符。

我使用的代码:

<xsl:template match="/">
   <xsl:for-each select="/x:Invoice">
      <xsl:if test="."><xsl:value-of select="substring(translate(cbc:Note,' ',''),27,4)"/></xsl:if>
   </xsl:for-each>
</xsl:template>

这是发票的代码:

<UBLVersionID>2.0</UBLVersionID>
<CustomizationID>1.0</CustomizationID>
<ProfileID>PowerOnline</ProfileID>
<ID>194545</ID>
<IssueDate>2019-05-16</IssueDate>
<InvoiceTypeCode>1</InvoiceTypeCode>
<Note>FB - bestelling voor HH7416</Note>
<TaxPointDate>2019-05-16</TaxPointDate>
<DocumentCurrencyCode>EUR</DocumentCurrencyCode>
<LineCountNumeric>7</LineCountNumeric>
<OrderReference>
<ID>Invoice of an supplier</ID>
<SalesOrderID>19538</SalesOrderID>
<IssueDate>2019-04-30</IssueDate>

预期结果是/ x:Invoice / cbc:Note的后4个字符,所以7416。该注释有时可以是FB-HH6464,所以我一直想拥有该cbc的后4个字符:Note

1 个答案:

答案 0 :(得分:2)

您可以将string-lengthsubstring结合使用以获取最后4个字符

<xsl:value-of select="substring(cbc:Note, string-length(cbc:Note) - 3)" />

(因此,执行string-length(cbc:Note)将获得最后一个字符,string-length(cbc:Note) - 1将获得最后两个字符,依此类推...)