我在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>
但我需要将主键/第一列设为“Key”。现在,具有多个Tier 3嵌套的元素将水平输出,即全部在一行中。我希望每个“密钥”都与相关数据在一起:
密钥名称Var2
1 One Durp
1两个Durp
2两个Durp Durp
答案 0 :(得分:0)
为Tier4
元素创建模板以在表中创建行。当Tier4
元素是上下文节点时,您可以轻松地对其Key
和Var2
个孩子进行处理,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>