XSLT到无序列表

时间:2012-02-05 04:11:38

标签: html xml xslt

我正在尝试使用xml文档并转换为带嵌套的标准html列表:

示例

<orgtree>
  <Node nodeID="1363" nodeDescription="Some User" nodeNote="Some Note" X="5260" Y="20">
    <Node nodeID="1373" nodeDescription="Some Child User" nodeNote="More">
      <Node nodeID="1374" nodeDescription="Another Child" nodeNote="More"/>
      <Node nodeID="1375" nodeDescription="Another Child" nodeNote="More"/>
      <Node nodeID="1376" nodeDescription="Another Child" nodeNote="More"/>
      <Node nodeID="1377" nodeDescription="Another Child" nodeNote="More"/>
    </Node>
    <Node nodeID="1474" nodeDescription="Another Child" nodeNote="More"/>
    <Node nodeID="1475" nodeDescription="Another Child" nodeNote="More"/>
  </Node>
</ogtree>

我希望它显示为:

<ul>
  <li>Some User<br/>SomeNote
    <ul>
      <li>Some Child User<br/>More
        <ul>
          <li>Another Child<br/>More</li>
          <li>Another Child<br/>More</li>
          <li>Another Child<br/>More</li>
          <li>Another Child<br/>More</li>
        </ul>
      <li>Another Child<br/>More</li>
      <li>Another Child<br/>More</li>
    </ul>
  </li>
</ul>

注意:树可以永远嵌套,每个节点可以有多个子节点。我想以同样的方式展示ul li,但我还是无法做到这一点......有人能给我一个更好的改造方法吗?每个节点还具有用于基于节点id查看图像的页面的图形位置。 (虽然,我可以关心这一部分。)

1 个答案:

答案 0 :(得分:4)

这是您需要的XSLT的基本设置。

<?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:template match="orgtree">
    <ul>
      <xsl:apply-templates/>
    </ul>    
  </xsl:template>
  <xsl:template match="Node">
    <li>
      <xsl:value-of select="@nodeDescription"/>
    </li>
    <xsl:if test="Node">
      <ul>
        <xsl:apply-templates/>
      </ul>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

它有一个匹配任何Node元素的模板,并为其任何子项应用此模板,因为它有任何test="Node"。这种技术称为recursion

在学习XSLT时,我可以推荐基本和高级主题MSDN library和基础知识w3schools