我的问题是将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>
标签:
想要的输出:
50001 DK 1555888991 DAVE KRUVCZEC
答案 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> </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>