0
我在使用XSLT动态分组时遇到问题。组动态生成的节点集
我的问题很复杂(我认为)部分是因为我试图转换的nodeset是从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>
的$结果节点集具有这样的结构:
<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>
我有困难的时候,尝试组合使用密钥la la muenchian自匹配不允许变量:
<xsl:key name="group-site" match="$result/sql/row-set/" use=?>
听起来不愉快,但XSL是关于转换结构化的XML文档。从这个角度来看,你的'$ result'节点集几乎没有提供任何有趣的结构来构建。 – xbug 2014-11-24 03:11:33
由于输入XML似乎是直接的SQL数据库输出,因此我建议您至少使用GROUP BY站点,并在XML中反映此结构元素。 – xbug 2014-11-24 03:16:23
@xbug - 我同意XSLT可能不是正确的工具。不幸的是,这是一个遗留项目,我正在扩大。也就是说也有一个源XML文档,但我省略了它。源XML包含构建sql $查询所需的节点。上面显示的我的“期望结果”将与源文档集成以生成新的转换后的XML。 – user2503167 2014-11-24 04:37:47