XSLT - 将XML格式化为具有特定长度的纯文本

时间:2015-10-22 20:35:34

标签: xml xslt text formatting

我的问题是将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个字符
  • INITIALS有3个字符
  • CODE有20个字符
  • FIRSTNAME有20个字符
  • LASTNAME有20个字符

想要的输出:

50001 DK           1555888991                DAVE            KRUVCZEC

1 个答案:

答案 0 :(得分: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>