使用 xslt 将 XML 转换为 TXT

Transforming XML to TXT using xslt

xslt 转换后,TXT 文件中的文本格式出现问题。 这是我的 XML 文件的示例。

<książka id="k3">
        <tytuł> "Ogniem i Mieczem" </tytuł>
        <autor> Henryk Sienkiewicz </autor>
        <rokWydania> 1884 </rokWydania>
        <wydawnictwo> Świat Książki </wydawnictwo>
        <gatunek>Powieść</gatunek>
        <liczbaStron> 758 </liczbaStron>
        <cena>40.99 PLN</cena>
        <waluta> PLN </waluta>
     </książka>

要转换它,我正在使用此模板:

<xsl:template match="książka">
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>KSIĄŻKA:&#xA;</xsl:text>
    <xsl:text>TYTUŁ:&#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;',tytuł)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>AUTOR: &#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;&#x9;',autor)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>ROK WYDANIA: &#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;',rokWydania)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>WYDAWNICTWO: &#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;',wydawnictwo)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>GATUNEK: &#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;',gatunek)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>LICZBA STRON: &#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;&#x9;',liczbaStron)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>CENA: &#x9;</xsl:text>
    <xsl:value-of select="concat('&#x9;',cena)" />
    <xsl:text>&#xA;</xsl:text>

我在 txt 文件中的输出与预期的一样不规则。

KSIĄŻKA:
TYTUŁ:       "Mały Książe" 
AUTOR:           Antoine de Saint-Exupéry
ROK WYDANIA:         1943 
WYDAWNICTWO:         Zielona Sowa 
GATUNEK:        Nowela
LICZBA STRON:            62 
CENA:       4.99 USD

我只想要正确的数据列。我尝试使用 concat 和子字符串函数或添加变量 $spaceCount 来完成它,但无法获得预期结果。

关于如何解决这个问题的任何提示?

这是一个在命名模板中使用 substring() 的选项...

XML 输入

<książka id="k3">
    <tytuł> "Ogniem i Mieczem" </tytuł>
    <autor> Henryk Sienkiewicz </autor>
    <rokWydania> 1884 </rokWydania>
    <wydawnictwo> Świat Książki </wydawnictwo>
    <gatunek>Powieść</gatunek>
    <liczbaStron> 758 </liczbaStron>
    <cena>40.99 PLN</cena>
    <waluta> PLN </waluta>
</książka>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="książka">
    <xsl:text>&#xA;</xsl:text>
    <xsl:text>KSIĄŻKA:&#xA;</xsl:text>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'TYTUŁ:'"/>
      <xsl:with-param name="value" select="normalize-space(tytuł)"/>
    </xsl:call-template>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'AUTOR:'"/>
      <xsl:with-param name="value" select="normalize-space(autor)"/>
    </xsl:call-template>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'ROK WYDANIA:'"/>
      <xsl:with-param name="value" select="normalize-space(rokWydania)"/>
    </xsl:call-template>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'WYDAWNICTWO:'"/>
      <xsl:with-param name="value" select="normalize-space(wydawnictwo)"/>
    </xsl:call-template>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'GATUNEK:'"/>
      <xsl:with-param name="value" select="normalize-space(gatunek)"/>
    </xsl:call-template>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'LICZBA STRON:'"/>
      <xsl:with-param name="value" select="normalize-space(liczbaStron)"/>
    </xsl:call-template>
    <xsl:call-template name="pad">
      <xsl:with-param name="label" select="'CENA:'"/>
      <xsl:with-param name="value" select="normalize-space(cena)"/>
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="pad">
    <xsl:param name="label"/>
    <xsl:param name="value"/>
    <xsl:variable name="padding" 
      select="'                                                  '"/>
    <xsl:value-of select="concat($label,
      substring($padding,string-length($label) + string-length($value)),
      $value,'&#xA;')"/>
  </xsl:template>

</xsl:stylesheet>

输出

KSIĄŻKA:
TYTUŁ:                           "Ogniem i Mieczem"
AUTOR:                           Henryk Sienkiewicz
ROK WYDANIA:                                   1884
WYDAWNICTWO:                          Świat Książki
GATUNEK:                                    Powieść
LICZBA STRON:                                   758
CENA:                                     40.99 PLN