-1
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 変換の使用。

4

1 に答える 1

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>&#x0A;</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>&#x0A;</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)" />
于 2012-11-28T09:22:35.983 に答える