0

我有两个 for-each 语句迭代,我希望输出在表中是垂直格式而不是水平格式。

目前它输出:

a b c
1 2 3

我希望它输出:

a 1
b 2
c 3

有人可以帮忙吗?这是 XSL:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" indent="no"/>
    <xsl:key name="names" match="Niche" use="."/>
    <xsl:key name="niche" match="row" use="Niche"/>

        <xsl:template match="/">
            <table border="1">

                <xsl:for-each select="//Niche[generate-id() = generate-id(key('names',.)[1])]">
                <xsl:sort select="."/>

                    <td>
                    <xsl:value-of select="."/>
                    </td>
                </xsl:for-each>

                <td><tr></tr></td>

                <xsl:for-each select="//row[generate-id(.)=generate-id(key('niche', Niche)[1])]">
                <xsl:sort select="Niche"/>

                    <td>
                    <xsl:value-of select="count(key('niche', Niche))"/>
                    </td>
                </xsl:for-each>

            </table>

    </xsl:template>
</xsl:stylesheet>

示例 XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl" ?>
<root>
    <row>
        <Niche>a</Niche>
    </row>
    <row>
        <Niche>b</Niche>
    </row>
    <row>
        <Niche>b</Niche>
    </row>
    <row>
        <Niche>c</Niche>
    </row>
    <row>
        <Niche>c</Niche>
    </row>
    <row>
        <Niche>c</Niche>
    </row>
</root>
4

1 回答 1

2

我很确定您需要做的就是:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="no"/>
  <xsl:key name="niche" match="Niche" use="."/>

  <xsl:template match="/">
    <table border="1">

      <xsl:for-each select="//Niche[generate-id(.)=generate-id(key('niche', .)[1])]">
        <xsl:sort select="."/>
        <tr>
          <td>
            <xsl:value-of select="."/>
          </td>
          <td>
            <xsl:value-of select="count(key('niche', .))"/>
          </td>
        </tr>
      </xsl:for-each>

    </table>

  </xsl:template>
</xsl:stylesheet>

但请提供一个示例输入 XML,以便我们进行验证。

在示例输入中,这会产生:

<table border="1">
  <tr>
    <td>a</td>
    <td>1</td>
  </tr>
  <tr>
    <td>b</td>
    <td>2</td>
  </tr>
  <tr>
    <td>c</td>
    <td>3</td>
  </tr>
</table>

要改为从最高到最低的出现次数排序,您可以替换此行:

<xsl:sort select="."/>

有了这个:

<xsl:sort select="count(key('niche', .))" order="descending" data-type="number"/>
于 2013-01-19T14:27:47.293 回答