这是我的XML代码:
<?xml version="1.0" encoding="UTF-8"?> <catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
</cd>
</catalog>
这是我的XSLT代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="catalog/cd">
<tr>
<tr><br/><xsl:value-of select="title"/></tr>
<tr><br/><xsl:value-of select="artist"/></tr>
<tr><br/><xsl:value-of select="country"/></tr>
</tr>
<br/>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这是我的输出:
Empire Burlesque
Bob Dylan
USA
这是我想要的输出:
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
有关如何获得我想要的输出(即文字XML代码)的任何建议?我无法弄明白。
答案 0 :(得分:0)
使用IE,您可以将元素序列化的任务委托给JScript或VBScript中实现的扩展函数的字符串,而Google Chrome似乎仍然支持xmp
元素,对于Mozilla而言,无论如何需要编写或合并纯XSLT解决方案。
以下是IE和Chrome的示例:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:mf="http://example.com/mf"
exclude-result-prefixes="ms mf">
<xsl:output method="html" indent="yes"/>
<ms:script language="JScript" implements-prefix="mf">
function serialize(nodeSelection) {
return nodeSelection[0].xml;
}
</ms:script>
<xsl:template match="/">
<html lang="en">
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="catalog">
<table>
<tbody>
<xsl:apply-templates/>
</tbody>
</table>
</xsl:template>
<xsl:template match="cd">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="cd/*">
<td>
<xsl:choose>
<xsl:when test="function-available('mf:serialize')">
<xsl:value-of select="mf:serialize(.)"/>
</xsl:when>
<xsl:otherwise>
<xmp>
<xsl:copy-of select="."/>
</xmp>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
</xsl:stylesheet>
将节点序列化为字符串表示形式的复杂但完整的纯XSLT解决方案位于http://lenzconsulting.com/xml-to-string/。
答案 1 :(得分:0)
如果您的真实要求与您的人为设定的示例一样简单,那么您可能只会逃避:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:for-each select="catalog/cd">
<tr>
<td>
<xsl:text><title></xsl:text>
<xsl:value-of select="title"/>
<xsl:text></title></xsl:text>
</td>
<td>
<xsl:text><artist></xsl:text>
<xsl:value-of select="artist"/>
<xsl:text></artist></xsl:text>
</td>
<td>
<xsl:text><country></xsl:text>
<xsl:value-of select="country"/>
<xsl:text></country></xsl:text>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
或稍微优雅一点:
<xsl:template match="/">
<table>
<xsl:for-each select="catalog/cd">
<tr>
<xsl:for-each select="*">
<td>
<xsl:value-of select="concat('<', name(), '>')"/>
<xsl:value-of select="."/>
<xsl:value-of select="concat('</', name(), '>')"/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>