Sample XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="main">
<xsl:value-of select="name"/>
SSN: <xsl:value-of select="ssn"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="address1"/>
DOB: <xsl:value-of select="dob"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="address2"/>
GENDER: <xsl:value-of select="gender"/>
EYE COLOR: <xsl:value-of select="eye"/>
HEIGHT: <xsl:value-of select="height"/>
HAIR COLOR: <xsl:value-of select="hair"/>
WEIGHT: <xsl:value-of select="weight"/>
</xsl:template>
</xsl:stylesheet>
Sample XML:
<main>
<name>CHTP CLS DEBY</name>
<dob>1999-01-08</dob>
<ssn>18454512</ssn>
<address1>115 Z 88TH UL #226-F</address1>
<address2>ARVADA, CO 80004</address2>
<gender>M</gender>
<eye>Blue</eye>
<hair>Brown</hair>
<height>182</height>
<weight>69</weight>
</main>
我想实现这样的目标,
CHTP CLS DEBY SSN: *****4512
115 Z 88TH UL #226-F DOB: 1999-01-08
ARVADA, CO 80004
Gender: M
Eye Color: Blue Height: 182
Hair Color: Brown Weight: 69
使用XSL转换。
答案 0 :(得分:1)
在XSLT 1.0中没有一般等价的printf("%-30s", something)
,我使用的通常技巧是创建一个包含长字符串的变量,然后获取适当长度的子字符串。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="spaces"
select="' '"/>
<xsl:template match="main">
<xsl:call-template name="print-padded">
<xsl:with-param name="str" select="name" />
<xsl:with-param name="width" select="43" />
</xsl:call-template>
<xsl:text>SSN: </xsl:text>
<xsl:value-of select="ssn" />
<xsl:text>
</xsl:text>
<xsl:call-template name="print-padded">
<xsl:with-param name="str" select="address1" />
<xsl:with-param name="width" select="53" />
</xsl:call-template>
<xsl:text>DOB: </xsl:text>
<xsl:value-of select="dob" />
<xsl:text>
</xsl:text>
<!-- and so on for the other elements -->
</xsl:template>
<xsl:template name="print-padded">
<xsl:param name="str" select="''" />
<xsl:param name="width" select="0" />
<xsl:value-of select="$str" />
<xsl:value-of select="substring($spaces, 1, $width - string-length($str))" />
</xsl:template>
</xsl:stylesheet>
我更喜欢为换行符使用字符引用,因为这对.xsl
文件的重新格式化(意外或故意)更为健壮。
编辑:我注意到你也试图混淆SSN,你可以使用相同的技巧
<xsl:variable name="stars" select="'*******************'" />
<xsl:value-of select="substring($stars, 1, string-length(ssn) - 4)" />
<xsl:value-of select="substring(ssn, string-length(ssn) - 4)" />