在XSLT中创建列

时间:2018-08-16 12:00:11

标签: xslt xslt-1.0

请使用基本XSLT模板来帮助为每个项目创建列。 输入XML:

<list>
    <item>
        <name>John</name>
        <image>John Picture</image>
    </item>
    <item>
        <name>Bob</name>
        <image>Bob Picture</image>
    </item>
</list>

输出HTML:

<table>
    <tr>
        <td>John</td>
        <td>Bob</td>
    </tr>
    <tr>
        <td>John Picutre</td>
        <td>Bob Picture</td>
    </tr>
</table>

非常感谢您

2 个答案:

答案 0 :(得分:0)

您需要发布您编写的XSLT以获得结果,以下是您可以使用的代码:

最终更新脚本:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">

    <xsl:output indent="yes"/>

    <xsl:template match="list">
        <table>
            <tr>
                <xsl:for-each select="item/name">
                    <td>
                        <xsl:value-of select="."/>
                    </td>
                </xsl:for-each>
            </tr>
            <tr>
                <xsl:for-each select="item/image">
                    <td>
                        <xsl:value-of select="."/>
                    </td>
                </xsl:for-each>
            </tr>
        </table>
    </xsl:template>


</xsl:stylesheet>

答案 1 :(得分:0)

如果您希望每个item元素都有一列,那么您应该首先选择仅​​前item个元素下的元素,因为它们将代表每一行的开始

<xsl:for-each select="item[1]/*">

然后,要构建该行,请在所有item元素下获取与当前所选名称相同的相关元素

<xsl:apply-templates select="../../item/*[name() = name(current())]" />

尽管您定义这样的键可能会更容易...

<xsl:key name="items" match="item/*" use="name()" />

然后您将获得具有相同名称的元素,如下所示:

<xsl:apply-templates select="key('items', name())" />

尝试使用此XSLT

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

    <xsl:key name="items" match="item/*" use="name()" />

    <xsl:template match="list">
        <table>
            <xsl:for-each select="item[1]/*">
                <tr>
                    <xsl:apply-templates select="key('items', name())" />
                </tr>
            </xsl:for-each>
        </table>
    </xsl:template>

    <xsl:template match="item/*">
        <td>
            <xsl:value-of select="." />
        </td>
    </xsl:template>
</xsl:stylesheet>

这假定所有元素都位于每个item下(嗯,至少在第一个item下)。