我正在使用XSL Transformation从不同的xml文件生成xml文件。直到现在我已经使用XSL转换成功获得了输出xml文件。但是我希望输出中的每个值都有一个固定的定义长度。这个长度应该如下:
成员:此值的长度应为50个字符。 date:此值的长度应为10个字符。 type:此值的长度应为6个字符。 amount:该值的长度应为10个字符,包括小数点和两位小数。 注释:该值的长度应为50个字符。
我输入的xml文件是:
<records>
<record>
<member>Vikram Singh</member>
<transaction>
<date>2015-02-09</date>
<type>credit</type>
<amount>300000</amount>
<remark>successful</remark>
</transaction>
<transaction>
<date>2015-02-10</date>
<type>debit</type>
<amount>30000</amount>
<remark>successful</remark>
</transaction>
</record>
<record>
<member>Sudhanshu Singh</member>
<transaction>
<date>2015-01-13</date>
<type>credit</type>
<amount>100000</amount>
<remark>successful</remark>
</transaction>
<transaction>
<date>2015-02-10</date>
<type>debit</type>
<amount>10000</amount>
<remark>not successful</remark>
</transaction>
</record>
</records>
我获得的输出是正确的,应该是这样但是长度固定。
<?xml version="1.0" encoding="UTF-8"?>
<Transactions>
<Transaction>
<member>Vikram Singh</member>
<date>2015-02-09</date>
<type>credit</type>
<amount> 300000</amount>
<remark>successful</remark>
</Transaction>
<Transaction>
<member>Vikram Singh</member>
<date>2015-02-10</date>
<type>debit</type>
<amount> 30000</amount>
<remark>successful</remark>
</Transaction>
<Transaction>
<member>Sudhanshu Singh</member>
<date>2015-01-13</date>
<type>credit</type>
<amount> 100000</amount>
<remark>successful</remark>
</Transaction>
<Transaction>
<member>Sudhanshu Singh</member>
<date>2015-02-10</date>
<type>debit</type>
<amount> 10000</amount>
<remark>not successful</remark>
</Transaction>
</Transactions>
我使用的xsl文件是:
<xsl:template match = "/">
<xsl:for-each select="transaction">
<transaction>
<member>
<xsl:value-of select = "$member"/>
</member>
<date>
<xsl:value-of select = "date"/>
</date>
<type>
<xsl:value-of select = "type"/>
</type>
<amount>
<xsl:value-of select = "amount"/>
</amount>
<remark>
<xsl:value-of select = "remark"/>
</remark>
</transaction>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
帮我制作固定长度的输出。
答案 0 :(得分:2)
我正在使用xsl版本:1.0和xsl供应商:libxslt
好,那么你可以使用EXSLT str:align()
和str:padding
函数。这是一个最小化的示例,显示如何将type
元素填充为6个字符。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/records">
<transactions>
<xsl:for-each select="record/transaction">
<transaction>
<!-- ... -->
<type>
<xsl:value-of select="str:align(type, str:padding(6))"/>
</type>
<!-- ... -->
</transaction>
</xsl:for-each>
</transactions>
</xsl:template>
</xsl:stylesheet>
转换正在运行而没有错误,但它没有做到 输出xml中的填充
请运行以下样式表(针对任何有效的XML输入)并报告结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<results>
<processsor>
<xsl:value-of select="system-property('xsl:vendor')"/>
</processsor>
<support>
<align>
<xsl:value-of select="function-available('str:align')"/>
</align>
<padding>
<xsl:value-of select="function-available('str:padding')"/>
</padding>
</support>
<spaces>
<xsl:value-of select="str:padding(10)"/>
</spaces>
<align>
<xsl:value-of select="str:align('12345', '----------')"/>
</align>
<combined>
<under>
<xsl:value-of select="str:align('12345', str:padding(10))"/>
</under>
<over>
<xsl:value-of select="str:align('1234567890123', str:padding(10))"/>
</over>
</combined>
</results>
</xsl:template>
</xsl:stylesheet>