如何利用XML注释进行XSLT转换?

时间:2013-02-04 00:32:55

标签: html xml xslt html-lists

什么XSLT会将以下XML模式转换为下面的HTML输出?

<ELEMENT1>
  <!--
  Comment for element 2
  -->
  <ELEMENT2>
    <ELEMENT3>ABC</ELEMENT3>
  </ELEMENT2>
  <!--
  Comment for element 4
  -->
  <ELEMENT4>
    <ELEMENT5>0534564117</ELEMENT5>
    <!--
        Comment for element 6
    -->   
    <ELEMENT6>123456</ELEMENT6>
  </ELEMENT4>
</ELEMENT1>

输出:

  
  • ELEMENT1
    • 对元素的评论   2
    • ELEMENT2
      • ELEMENT3
      
    • 对元素4的评论
    • ELEMENT4
      •   
      • ELEMENT5
      • 对元素6的评论
      •   
      • ELEMENT6

2 个答案:

答案 0 :(得分:1)

您需要一个包含三个模板的样式表。一个模板匹配文档根并发出外部HTML结构,并在所有子节点上照常重复。它将其他所有内容包装在HTML无序列表中。

<xsl:template match="/">
  <html>
    <head><title>Demo document</title></head>
    <body>
      <ul>
        <xsl:apply-templates/>
      </ul>
    </body>
  </html>
</xsl:template>

一个模板通过发出包含元素类型名称的列表项来处理元素。如果元素有子元素,它会重复它们,将它们的输出包装在嵌套的ul元素中。

<xsl:template match="*">
  <li>
    <xsl:value-of select="name()"/>
    <xsl:if test="node()">
      <ul>
        <xsl:apply-templates select="node()"/>
      </ul>
    </xsl:if>
  </li>
</xsl:template>

如果你不介意发出一个空的ul元素(大多数浏览器并不特别在意),你可以不使用嵌套xsl:if周围的ul

第三个模板匹配注释并为它们发出列表项,将注释的内容包装在i元素中。

<xsl:template match="comment()">
  <li><i><xsl:value-of select="."/></i></li>
</xsl:template>

如果文本节点的默认模板不可接受,您可能还需要一个模板来处理文本节点。

答案 1 :(得分:0)

你可能正在寻找的是xsl:comment指令,它在输出中创建了一个注释。