首页 > 解决方案 > 如何删除前导零

问题描述

我有以下 xml 并且需要一个 XSL 转换器,以便 <RELEASE_NO>08</RELEASE_NO> 将转换为 <RELEASE_NO>8</RELEASE_NO> (我将删除前导零)

<STA_INVOICE>
      <BANK_REFERENCE>9326307</BANK_REFERENCE>
      <CURRENCY_CODE>SEK</CURRENCY_CODE>
      <DELIVER_NOTE_NUMBER/>
      <DUE_DATE>2021-07-16</DUE_DATE>
      <DUE_PERCENT/>
      <EAN_LOCATION_DELIVERY_ADDRESS>EMCAT1</EAN_LOCATION_DELIVERY_ADDRESS>
      <EAN_LOCATION_DOCUMENT_ADDRESS>7350031680027</EAN_LOCATION_DOCUMENT_ADDRESS>
      <EAN_LOCATION_DOCUMENT_ADDRESS_FOR_PAYER>7350031680027</EAN_LOCATION_DOCUMENT_ADDRESS_FOR_PAYER>
      <EAN_LOCATION_OUR_DOCUMENT_ADDRESS>EMCAT1</EAN_LOCATION_OUR_DOCUMENT_ADDRESS>
      <INVOICE_DATE>2021-07-15</INVOICE_DATE>
      <INVOICE_NO>13132345-1</INVOICE_NO>
      <INVOICE_TYPE>DEBET</INVOICE_TYPE>
      <INVOICING_ROUNDING/>
      <ORDER_NO/>
      <PO_REFERENCE>965</PO_REFERENCE>
      <SUPPLIER_VAT_NO>5562776434</SUPPLIER_VAT_NO>
      <STA_BUYER_ADDRESS>
            <STA_BUY_ADDRESS>
                  <CITY>NORRKÖPING</CITY>
                  <COUNTRY>SE</COUNTRY>
                  <PO_BOX>BOX 773</PO_BOX>
                  <RECEIVER_NAME>THE STADIUM SVERIGE AB</RECEIVER_NAME>
                  <ZIP_CODE>601 60</ZIP_CODE>
            </STA_BUY_ADDRESS>
      </STA_BUYER_ADDRESS>
      <STA_DELIVERY_ADDRESS>
            <STA_DELIV_ADDRESS>
                  <ADDRESS_1>STROBOGATAN 5</ADDRESS_1>
                  <CITY>NORRKOPING</CITY>
                  <COUNTRY>SE</COUNTRY>
                  <RECEIVER_NAME>STADIUM 901</RECEIVER_NAME>
                  <ZIP_CODE>602 23</ZIP_CODE>
            </STA_DELIV_ADDRESS>
   </STA_DELIVERY_ADDRESS>
      <STA_INVOICE_LINES>
            <STA_INVOICE_LINE>
                  <CATALOG_NO>010008002010</CATALOG_NO>
                  <INVOICE_ITEM_POS>1</INVOICE_ITEM_POS>
                  <INVOICED_QTY>5</INVOICED_QTY>
                  <LINE_NO>1</LINE_NO>
                  <RELEASE_NO>08</RELEASE_NO>
                  <NAME/>
                  <NET_AMOUNT>199.93</NET_AMOUNT>
                  <PO_REFERENCE>950</PO_REFERENCE>
                  <PURCHASE_CATALOG_NO/>
                  <SALES_UNIT_MEAS>PCE</SALES_UNIT_MEAS>
                  <SALES_UNIT_PRICE>199.93</SALES_UNIT_PRICE>
                  <SUPPLIER_ARTICLE_EAN/>
                  <VAT_AMOUNT>0</VAT_AMOUNT>
                  <VAT_PERCENT>0.00</VAT_PERCENT>
            </STA_INVOICE_LINE>
      </STA_INVOICE_LINES>
      <STA_INVOICE_SUMMARYS>
            <STA_INVOICE_SUMMARY>
                  <LINES_NET_AMOUNT>199.93</LINES_NET_AMOUNT>
                  <TAXABLE_AMOUNT>199.93</TAXABLE_AMOUNT>
                  <TOTAL_INVOICE_AMOUNT>199.93</TOTAL_INVOICE_AMOUNT>
                  <TOTAL_VAT_AMOUNT>0</TOTAL_VAT_AMOUNT>
            </STA_INVOICE_SUMMARY>
      </STA_INVOICE_SUMMARYS>
   <STA_PAYER_ADDRESS>
            <STA_PAY_ADDRESS>
                  <CITY>NORRKÖPING</CITY>
                  <COUNTRY>SE</COUNTRY>
                  <PAYER_NAME>THE STADIUM SVERIGE AB</PAYER_NAME>
                  <PO_BOX>BOX 773</PO_BOX>
                  <ZIP_CODE>601 60</ZIP_CODE>
            </STA_PAY_ADDRESS>
      </STA_PAYER_ADDRESS>
      <STA_SUPPLIER_ADDRESS>
      <STA_SUPP_ADDRESS>
                  <CITY>HILVERSUM</CITY>
                  <COUNTRY>NL</COUNTRY>
                  <PO_BOX>COLOSSEUM 1</PO_BOX>
                  <SUPPLIER_NAME>Peak Performance</SUPPLIER_NAME>
                  <ZIP_CODE>1213 NL</ZIP_CODE>
            </STA_SUPP_ADDRESS>
      </STA_SUPPLIER_ADDRESS>
</STA_INVOICE>

我创建了下面的 XSL 转换器

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="urn:ifsworld-com:schemas:RECEIVE_SUPPLIER_INVOICE_STA ">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
    <xsl:strip-space elements="*"/>
  
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ns1:STA_INVOICE_LINE/RELEASE_NO[string-length() > 0]">
        <xsl:copy>
            <xsl:value-of select="number(.)"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

但没有给出预期的输出(使用在线免费转换器 - https://www.freeformatter.com/xsl-transformer.html

有人可以让我知道我在哪里犯了错误吗?

标签: xmlxslt-1.0

解决方案


请尝试以下 XSLT。

您的输入 XML 没有名称空间。因此无需在 XSLT 中使用它们。

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="RELEASE_NO">
        <xsl:copy>
            <xsl:value-of select="number(.)"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

推荐阅读