2015-10-22 48 views
-1

我的問題是關於通過XSLT將XML轉換爲純文本,並對轉換後的每個XML標記給出特定的長度。XSLT - 將XML格式化爲指定長度的純文本

例如:

XML輸入

<Request> 
     <Products> 
       <WEBVersion>5</WEBVersion> 
       <Subscriber> 
        <INNERCODE>0001</INNERCODE> 
        <INITIALS>DK</INITIALS> 
        <CODE>1555888991</CODE> 
        <FIRSTNAME>DAVE</FIRSTNAME> 
        <LASTNAME>KRUVCZEC</LASTNAME> 
       </Subscriber> 
     </Products> 
</Request> 

的標籤:

  • WEBVersion具有1個字符
  • INNERCODE具有4個字符
  • 聲母具有3個字符
  • 代碼具有20個字符
  • FIRSTNAME具有20個字符
  • LASTNAME具有20個字符

的希望輸出:

50001 DK   1555888991    DAVE   KRUVCZEC 
+0

我相信如果您搜索[XSLT]固定寬度(或固定長度),您會發現一些有用的答案。 –

回答

0

感謝您的線索@ michael.hor257k與您的標籤我找到了解決方案。

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
     <xsl:output method="text" indent="no"/> 

    <xsl:variable name="some_spaces" select="'                 '" /> 

     <xsl:template match="/"> 
      <xsl:apply-templates select="Request/Products" /> 
     </xsl:template> 

     <xsl:template match="Request/Products"> 
      <xsl:apply-templates mode="format" select="WEBVersion"> 
       <xsl:with-param name="width" select="number(2-1)"/> 
      </xsl:apply-templates> 
     <xsl:apply-templates mode="format" select="INNERCODE"> 
       <xsl:with-param name="width" select="number(7-3)"/> 
      </xsl:apply-templates> 
.. 
.. 
.. 
      <xsl:text>&#10;</xsl:text> 
     </xsl:template> 

     <xsl:template match="node()" mode ="format"> 
      <xsl:param name="width" /> 
      <xsl:value-of select="substring(concat(text(),$some_spaces), 1, $width+1)"/> 
     </xsl:template> 
     <xsl:template match="node()" mode="format_date"> 
      <xsl:param name="width" /> 
      <xsl:value-of select="substring(concat(translate(text(),'/',''),$some_spaces), 1, $width+1)"/> 
     </xsl:template> 

    </xsl:stylesheet>