如何忽略节点中的特殊字符?

时间:2019-06-20 08:29:24

标签: xml xslt xslt-1.0

我有以下xml,我只想将特殊字符“ +”排除在外。

<LegalMonetaryTotal>
<LineExtensionAmount currencyID="EUR">+1848.20</LineExtensionAmount>
<TaxExclusiveAmount currencyID="EUR">+1848.20</TaxExclusiveAmount>
<TaxInclusiveAmount currencyID="EUR">+2236.32</TaxInclusiveAmount>
<PayableAmount currencyID="EUR">+2236.32</PayableAmount>

我已经尝试过一些代码,例如substring-length等。或在代码之前添加#,但是我没有得到想要得到的结果。

<xsl:template match="/">
   <xsl:for-each select="/x:Invoice/cac:LegalMonetaryTotal">
      <xsl:if test="cbc:TaxExclusiveAmount"><xsl:value-of select="format-number(cbc:TaxExclusiveAmount,'##0.00')"/></xsl:if>
   </xsl:for-each>
</xsl:template>

这将显示结果+1848,20

我只想得到1848,20。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

如果一开始总是会有一个“ +”,那么您可以这样做...

<xsl:value-of select="format-number(substring(cbc:TaxExclusiveAmount, 2),'##0.00')"/>

或者,如果它可能不存在,您可以这样做

<xsl:value-of select="format-number(translate(cbc:TaxExclusiveAmount, '+', ''),'##0.00')"/>

请注意,如果您现有的xsl:for-each中没有其他代码,则可以简化为该代码

<xsl:for-each select="/LegalMonetaryTotal/TaxExclusiveAmount">
  <xsl:value-of select="format-number(translate(., '+', ''),'##0.00')"/>
</xsl:for-each>