1

我对 XML/XSL 的理解还远远不够。

我有一个如下所示的 XML 文件:

 <?xml version="1.0" encoding="ISO-8859-1"?>
<AllNames>
    <Tier2>
        <Binary>0</Binary>
        <Name>One</Name>
        <Tier3>
            <Tier4>
            <Key>1</Key>
            <Var2>Durp</Var2>
            </Tier4>
        </Tier3>
    </Tier2>
    <Tier2>
        <Binary>1</Binary>
        <Name>Two</Name>
        <Tier3>
            <Tier4>
            <Key>1</Key>
            <Var2>Durp</Var2>
            </Tier4>
        </Tier3>
        <Tier3>
            <Tier4>
            <Key>2</Key>
            <Var2>Durp Durp</Var2>
            </Tier4>
        </Tier3>
    </Tier2>
</Tier1>

我正在使用如下所示的 XSL 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>

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

<xsl:template match="/">
  <html>
  <body>
  <table>
    <tr bgcolor="#9acd32">
      <th>Name</th>
      <th>Key</th>
      <th>Var2</th>
    </tr>
    <xsl:for-each select="AllNames/Tier2">
    <tr>
      <td><xsl:value-of select="Name"/></td>
      <xsl:for-each select="Tier3/Tier4">
      <td><xsl:value-of select="Key"/></td>
      <td><xsl:value-of select="Var2"/></td>
      </xsl:for-each>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

但我需要主键/第一列是“键”。现在,具有多个第 3 层嵌套的元素将水平输出,即全部在一行中。我希望每个“键”与相关数据在自己的行中:

键名 Var2

1 一滴

1 两滴

2 两滴滴滴

4

1 回答 1

0

为元素创建模板以Tier4在表中创建行。当Tier4元素是上下文节点时,您可以轻松地寻址它KeyVar2子节点,可以Name从它的父节点获取。

在表格的主模板内,使用<xsl:apply-templates/>“推送”元素,它们将匹配模板并为每个元素Tier4生成一行。Tier4

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

    <xsl:template match="/">
        <html>
            <body>
                <table>
                    <tr bgcolor="#9acd32">
                        <th>Key</th>
                        <th>Name</th>
                        <th>Var2</th>
                    </tr>
                    <xsl:apply-templates select="AllNames/Tier2/Tier3/Tier4"/>
                </table>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="Tier4">
        <tr>
            <td><xsl:value-of select="Key"/></td>
            <td><xsl:value-of select="../../Name"/></td>
            <td><xsl:value-of select="Var2"/></td>
        </tr>
    </xsl:template>
</xsl:stylesheet>
于 2013-09-12T01:04:43.060 回答