0

什么 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>

输出:

  • 元素1
    • 对元素 2 的评论
    • 元素2
      • 元素3
    • 对元素 4 的评论
    • 元素4
      • 元素5
      • 对元素 6 的评论
      • 元素6
4

2 回答 2

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>

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

于 2013-02-04T00:53:17.137 回答
0

您可能正在寻找的是 xsl:comment 指令,它会在输出中创建注释。

于 2013-02-04T08:57:58.123 回答