xslt, benutzerdefinierte Funktion, um pad-string-Werte mit Leerzeichen

Habe ich zum konvertieren von xml-Daten in Textdatei mit fester Länge unter Verwendung von XSLT 2.0.

Konnte ich so etwas wie <xsl:value-of select="substring(concat(../../msg:StreamStart/msg:Stream/msg:AgencyBankParameter, ' '), 1, 10)"/> die arbeiten, aber mit 20 Spalten, alle von Ihnen ausgegeben werden, um verschiedene Längen-ich dachte, es wäre eleganter, um eine Globale Funktion zum verketten von strings und der Rückgabe des Teilstrings.

Also schrieb ich dies:

<xsl:function name="func:padStr">
    <xsl:param name="str"/> 
    <xsl:param name="chr"/> 
    <xsl:param name="len"/> 
    <xsl:value-of select="substring(concat($str,$chr),1,$len)"/>
</xsl:function>

denen kompiliert unter xslt 2.0 in Ordnung, aber wenn ich versuche, es zu benutzen meine xsl ausfällt.

Habe ich versucht, dieses pad der oben genannten Zeichenfolge Wert, aber es scheitert jedes mal und ich weiß nicht, was Sie als Nächstes versuchen:

Hier ist meine komplette XML:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msg="http://www.voca.com/schemas/messaging" 
xmlns:cmn="http://www.voca.com/schemas/common" >
<xsl:output method="text" encoding="UTF-8" />

<xsl:function name="func:padStr">
    <xsl:param name="str"/> 
    <xsl:param name="chr"/> 
    <xsl:param name="len"/> 
    <xsl:value-of select="substring(concat($str,$chr),1,$len)"/>
</xsl:function>

<xsl:template match="/">
    <xsl:for-each select="msg:VocaDocument/msg:Data/msg:Document/msg:DDIVouchers/msg:Voucher">
        <xsl:value-of select="substring(concat(../../msg:StreamStart/msg:Stream/msg:AgencyBankParameter, '          '), 1, 10)"/>

        <!-- THIS CAUSES A FAIL -->    
        <xsl:value-of select="func:padStr('../../msg:StreamStart/msg:Stream/msg:AgencyBankParameter', ' '), 1, 10)"/>

        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:AgencyBankParameter" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:BankName" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:BankCode" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:AgencyBankName" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:AgencyBankCode" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:StreamCode" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:VoucherSortCode" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:VoucherAccountNumber" />
        <xsl:value-of select="msg:BankAccount/msg:SortCode" />
        <xsl:value-of select="msg:BankAccount/msg:AccountNumber" />
        <xsl:value-of select="msg:BankAccount/msg:TotalVouchers" />

        <!-- NOTE HOW TO EXTRACT AN ADDRESS ELEMENT THAT HAS ITS OWN NAMESPACE -->
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:AddresseeName" />
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:PostalName" />
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:AddressLine" />
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:TownName" />
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:CountyIdentification" />
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:CountryName" />
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:ZipCode" />

        <xsl:text>&#xD;&#xA;</xsl:text>
    </xsl:for-each>
</xsl:template> 

</xsl:stylesheet>

hier (der Vollständigkeit halber) ist mein xml:

<VocaDocument xmlns:cmn="http://www.voca.com/schemas/common"  xmlns="http://www.voca.com/schemas/messaging" xmlns:iso="http://www.voca.com/schemas/common/iso" xmlns:env="http://www.voca.com/schemas/envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.voca.com/schemas/messaging http://www.voca.com/schemas/messaging/Voca_AUDDIS_AdviceofDDI_v1.0.xsd">
  <Data>
      <Document>
          <StreamStart>
              <Stream>
           <AgencyBankParameter>234</AgencyBankParameter>
          <BankName>LLOYDS BANK PLC</BankName>
          <BankCode>0004</BankCode>
          <AgencyBankName>BANK OF CYPRUS UK LTD</AgencyBankName>
          <AgencyBankCode>0234</AgencyBankCode>
          <StreamCode>01</StreamCode>
          <VoucherSortCode>SC300037</VoucherSortCode>
          <VoucherAccountNumber>46990760</VoucherAccountNumber>              
          </Stream>
          </StreamStart>
          <DDIVouchers>
              <Voucher>
                  <TransactionCode>NEW</TransactionCode> 
                  <OriginatorIdentification>
                      <ServiceUserNumber>123456</ServiceUserNumber> 
                  </OriginatorIdentification>
               </Voucher>              
               <Voucher>
                  <TransactionCode>OLD</TransactionCode> 
                  <OriginatorIdentification>
                      <ServiceUserNumber>789012</ServiceUserNumber> 
                  </OriginatorIdentification>
                  <ContactDetails>
            <PhoneNumber>020 83395862</PhoneNumber>
            <FaxNumber> FAX</FaxNumber>
              <Address>
                  <cmn:AddresseeName>RANALD LESLIE</cmn:AddresseeName>
                  <cmn:PostalName>NUFFIELD HEALTH </cmn:PostalName>
                  <cmn:AddressLine>NUFFIELD HOUSE</cmn:AddressLine>
                  <cmn:TownName>SURBITON</cmn:TownName>
                  <cmn:CountyIdentification> </cmn:CountyIdentification>
                  <cmn:CountryName>UNITED KINGDOM</cmn:CountryName>
                  <cmn:ZipCode>KT6 4BN</cmn:ZipCode>
                  </Address>
        </ContactDetails>
          <ProcessingDate>2014-08-19</ProcessingDate>
          <BankAccount><FirstLastVoucherCode>FirstLast</FirstLastVoucherCode><AgencyBankCode>0234</AgencyBankCode><SortCode>SC300037</SortCode><AccountNumber>46990760</AccountNumber><TotalVouchers>1</TotalVouchers></BankAccount>
               </Voucher>


          </DDIVouchers>
      </Document>
  </Data>
</VocaDocument>

so, wie soll ich schreiben und rufen Sie die Funktion pad jede meiner Spalten?

Schreibe einen Kommentar