我需要一个将xml转换为html列表的通用xslt。
示例xml片段:
<person>
<firstname>A</firstname>
<lastname>B</lastname>
<address>
<city>C</city>
<street>S</street>
</address>
</person>
输出应为
<ul>
<li>person
<ul>
<li>firstname: A</li>
<li>lastname: B</li>
<li>address
<ul>
<li>city: C</li>
<li>street: S</li>
</ul>
</ul>
</li>
</ul>
源xml在运行时生成,并不总是具有此结构。因此标签名称可以不同。因此,xslt必须是通用的。
答案 0 :(得分:1)
尝试类似:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<ul>
<xsl:apply-templates select="*"/>
</ul>
</xsl:template>
<xsl:template match="*[*]">
<li>
<xsl:value-of select="name()"/>
<ul>
<xsl:apply-templates select="*"/>
</ul>
</li>
</xsl:template>
<xsl:template match="*[not(*)]">
<li>
<xsl:value-of select="concat(name(), ': ', .)"/>
</li>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
怎么样:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="*">
<li>
<xsl:value-of select="name()" />
<xsl:if test="text()">
<xsl:text>: </xsl:text>
<xsl:apply-templates select="text()" />
</xsl:if>
<xsl:if test="*">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>