使用xml和xsl生成xlsx文件

时间:2017-07-12 07:52:43

标签: xml xslt xlsx

我正在尝试从一堆数据中生成xlsx报告。我有手机号码,区号和朋友的名字,想要使用xml和xsl将它们插入到xlsx文件中。 我很难插入数据的标题,我似乎无法获取每列的数据。现在,他们只是捣碎在一起,没有分离器。

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

任何提示都将不胜感激!

输出是这样的。

enter image description here

1 个答案:

答案 0 :(得分:2)

如果要将制表符分隔的文件导入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>