Xml XSLT基于层次结构级别添加表头
下面是我的XML的一部分,它表示术语的层次结构。TopTerm是最外层的父项,ChildTerm是子项,它可以有尽可能多的子项Xml XSLT基于层次结构级别添加表头,xml,xslt,html-table,Xml,Xslt,Html Table,下面是我的XML的一部分,它表示术语的层次结构。TopTerm是最外层的父项,ChildTerm是子项,它可以有尽可能多的子项 <TopTerm ID="1" Entity="Term" Name="ENVIRONMENTAL MANAGEMENT"> <ChildTerm Relationship="narrower" ID="8" Entity="Term" Name="Auditing"> <ChildTerm Relationship
<TopTerm ID="1" Entity="Term" Name="ENVIRONMENTAL MANAGEMENT">
<ChildTerm Relationship="narrower" ID="8" Entity="Term" Name="Auditing">
<ChildTerm Relationship="narrower" ID="36" Entity="Term" Name="Environmental audit" />
<ChildTerm Relationship="narrower" ID="46" Entity="Term" Name="Type of audit []" />
</ChildTerm>
<ChildTerm Relationship="narrower" ID="11" Entity="Term" Name="Incidents">
<ChildTerm Relationship="narrower" ID="71" Entity="Term" Name="Bruce Beresford" />
<ChildTerm Relationship="narrower" ID="35" Entity="Term" Name="Case name" />
<ChildTerm Relationship="narrower" ID="83" Entity="Term" Name="Jack Lemmon" />
<ChildTerm Relationship="narrower" ID="87" Entity="Term" Name="Mary Pcikford" />
</ChildTerm>
<ChildTerm Relationship="narrower" ID="16" Entity="Term" Name="Monitoring" />
<ChildTerm Relationship="narrower" ID="18" Entity="Term" Name="Policies and procedures" />
</TopTerm>
我希望有一个XSLT1.0 HTML输出和表,结果应该如下所示
<table>
<tr>
<th>Level 1</th>
<th>Level 2</th>
<th>Level 3</th>
<th>Level 4</th>
</tr>
<tr>
<td>ENVIRONMENTAL MANAGEMENT</td>
<td>Auditing</td>
<td>Environmental audit</td>
</tr>
</table>
一级
二级
三级
四级
环境管理
审计
环境审计
差不多吧。我的问题是我不知道这个层次结构的深度,无法添加适当的级别x
,其中x可以是基于深度的任何数字。术语级别应与表格标题匹配
我的问题是我不知道这个层次结构的深度来添加
适当的级别x
,其中x可以是基于
深度
好吧,你只需要抓住最深的一个,然后迭代它的祖先。试着这样做:
XSLT1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="TopTerm">
<table border="1">
<thead>
<xsl:apply-templates select="descendant::ChildTerm[not(*)]" mode="header">
<xsl:sort select="count(ancestor-or-self::*)" data-type="number" order="descending"/>
</xsl:apply-templates>
</thead>
<tbody>
<xsl:apply-templates select="descendant::ChildTerm[not(*)]"/>
</tbody>
</table>
</xsl:template>
<xsl:template match="ChildTerm" mode="header">
<xsl:if test="position()=1">
<tr>
<xsl:for-each select="ancestor-or-self::*">
<th><xsl:value-of select="concat('Level ', position())"/></th>
</xsl:for-each>
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="ChildTerm">
<tr>
<xsl:for-each select="ancestor-or-self::*">
<td><xsl:value-of select="@Name"/></td>
</xsl:for-each>
</tr>
</xsl:template>
</xsl:stylesheet>
您能发布您尝试过的XSLT吗?我还没有尝试过任何东西,因为我不知道从哪里开始,似乎这就是我想要的。多谢各位much@JackLe如果您的问题得到了回答,请不要忘记通过接受答案来结束它。感谢您的提醒,我对stackoverflow还是很陌生,不知道流程:)