什么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
答案 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指令,它在输出中创建了一个注释。