我无法使用XSLT动态分组。
我的问题很复杂(我认为)部分是因为尝试转换的节点集是从apache xalan / sql扩展中动态生成的。我密切关注文档站点上的示例:see link。
XSLT项目很大;我只包括以下要点:
<xsl:template match="/">
<!-- I omitted the connection management code -->
<xsl:variable name="result" select="sql:query($connection, $query)"/>
<xsl:apply-templates select="$result/sql/row-set"/>
</xsl:template>
<xsl:template match="row">
<xsl:apply-templates select="col"/>
</xsl:template>
<xsl:template match="col">
<xsl:value-of select="text()"/>
</xsl:template>
$ result 节点集具有以下结构:
<sql>
<row-set>
<row>
<col column-label='Name'>Bob</col>
<col column-label='Site'>Site1</col>
<col column-label='Active'>Yes</col>
</row>
<row>
<col column-label='Name'>Sally</col>
<col column-label='Site'>Site2</col>
<col column-label='Active'>Yes</col>
</row>
<row>
<col column-label='Name'>Sam</col>
<col column-label='Site'>Site1</col>
<col column-label='Active'>No</col>
</row>
<row>
<col column-label='Name'>Jeff</col>
<col column-label='Site'>Site2</col>
<col column-label='Active'>Yes</col>
</row>
</row-set>
</sql>
期望的结果:
<sql>
<row-set>
<site>
<site-name>Site1</site-name>
<active>
<name>Bob</name>
</active>
<in-active>
<name>Sam</name>
</in-active>
</site>
<site>
<site-name>Site2</site-name>
<active>
<name>Sally</name>
<name>Jeff</name>
</active>
<in-active/>
</site>
</row-set>
</sql>
由于匹配不允许变量,因此我很难尝试使用密钥进行分组:
<xsl:key name="group-site" match="$result/sql/row-set/" use=?>
答案 0 :(得分:0)
我很难尝试使用钥匙和mu muchchian进行分组 因为匹配不允许变量:
您无需在匹配定义中使用变量。将您的关键元素定义为:
<xsl:key name="row-by-site" match="row" use="col[@column-label='Site']"/>
在调用key()函数时,您必须位于查询创建的“文档”的上下文中 - 否则它将在源XML文档中查找要匹配的行。