使用 xml 和 xsl 生成 xlsx 文件

Using xml and xsl to produce a xlsx file

我正在尝试从一堆数据中生成一份 xlsx 报告。我有手机号码、区号和朋友的名字,想用 xml 和 xsl 将它们插入到 xlsx 文件中。 我很难插入数据的 header,而且我似乎无法获取每一列的数据。现在,它们只是混合在一起,没有分隔符。

XML 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
    <friends>
        <jx:forEach var="friendsDetail" items="${friendList}">
            <friend
                    Name="${friendsDetail.getName()}/"                                                
                    MobileNumber="${friendsDetail.getMobileNumber()}"
                    AreaCode="${friendsDetail.getAreaCode()}"
             />
        </jx:forEach>
    </friends>
</jx:template>

XSL 文件

<?xml version="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="friend">
  <xsl:value-of select="@Name" /><xsl:text/>
  <xsl:value-of select="@MobileNumber" /><xsl:text/>
  <xsl:value-of select="@AreaCode" /><xsl:text/>
</xsl:template>
</xsl:stylesheet>

所以基本上,我希望数据以 xlsx 文件的形式出现,如下所示:

       Column 1.  Column 2.       Column 3.

Row 1. Name       Mobilenumber    Areacode

Row 2. Peter      48785635        4817

任何提示将不胜感激!

输出结果是这样的。

如果您希望将制表符分隔的文件导入 Excel,您可以首先定义一个参数来保存分隔符

的字符
<xsl:param name="separator" select="'&#x9;'" />

您可以使用 xsl:variable,但参数可能会被调用应用程序覆盖,从而使您可以轻松切换为逗号。

然后您可以轻松地在模板中输出分隔符

<xsl:value-of select="@Name" />
<xsl:value-of select="$separator" />

试试这个 XSLT

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

<xsl:param name="separator" select="'&#x9;'" />

<xsl:strip-space elements="*" />

<xsl:template match="friends">
  <xsl:text>Name</xsl:text>
  <xsl:value-of select="$separator" />
  <xsl:text>Mobile Number</xsl:text>
  <xsl:value-of select="$separator" />
  <xsl:text>Area Code</xsl:text>
  <xsl:text>&#10;</xsl:text>
  <xsl:apply-templates select="friend" />
</xsl:template>

<xsl:template match="friend">
  <xsl:value-of select="@Name" />
  <xsl:value-of select="$separator" />
  <xsl:value-of select="@MobileNumber" />
  <xsl:value-of select="$separator" />
  <xsl:value-of select="@AreaCode" />
  <xsl:text>&#10;</xsl:text>
</xsl:template>

</xsl:stylesheet>