我使用极简 MVC 框架,其中PHP控制器手上的DOM模型 to the XSLT 视图 (c.f. okapi http://okapi.liip.ch/).
为了构建导航树,我在 MYSQL 中使用了嵌套集。这样,我最终得到一个如下所示的模型 XML:
<tree>
<node>
<name>root</name>
<depth>0</depth>
</node>
<node>
<name>TELEVISIONS</name>
<depth>1</depth>
</node>
<node>
<name>TUBE</name>
<depth>2</depth>
</node>
<node>
<name>LCD</name>
<depth>2</depth>
</node>
<node>
<name>PLASMA</name>
<depth>2</depth>
</node>
<node>
<name>PORTABLE ELECTRONICS</name>
<depth>1</depth>
</node>
<node>
<name>MP3 PLAYERS</name>
<depth>2</depth>
</node>
<node>
<name>FLASH</name>
<depth>3</depth>
</node>
<node>
<name>CD PLAYERS</name>
<depth>2</depth>
</node>
<node>
<name>2 WAY RADIOS</name>
<depth>2</depth>
</node>
</tree>
它代表以下结构:
- root
- TELEVISIONS
- PORTABLE ELECTRONICS
如何使用 XSLT 将此平面 XML 列表转换为嵌套 HTML 列表?
PS:这是来自的示例树管理 MySQL 中的分层数据 http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/.
这种形式的平面列表很难在 xslt 中使用,因为您需要找到下一个分组的位置等。您可以使用不同的 xml 吗?例如,对于平面 xml:
<?xml version="1.0" encoding="utf-8" ?>
<tree>
<node key="0">root</node>
<node key="1" parent="0">TELEVISIONS</node>
<node key="2" parent="1">TUBE</node>
<node key="3" parent="1">LCD</node>
<node key="4" parent="1">PLASMA</node>
<node key="5" parent="0">PORTABLE ELECTRONICS</node>
<node key="6" parent="5">MP3 PLAYERS</node>
<node key="7" parent="6">FLASH</node>
<node key="8" parent="5">CD PLAYERS</node>
<node key="9" parent="5">2 WAY RADIOS</node>
</tree>
这样做变得微不足道(非常有效):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="nodeChildren" match="/tree/node" use="@parent"/>
<xsl:template match="tree">
<ul>
<xsl:apply-templates select="node[not(@parent)]"/>
</ul>
</xsl:template>
<xsl:template match="node">
<li>
<xsl:value-of select="."/>
<ul>
<xsl:apply-templates select="key('nodeChildren',@key)"/>
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
这是一个选择吗?
当然,如果您将 xml 构建为层次结构,那就更容易了 ;-p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)