XSLT的output元素是XSLT样式表中用于定义转换结果序列化规则的重要配置项,它可以在转换过程开始前指定输出文档的各种属性,确保最终的转换结果符合预期格式。通过合理配置output元素的属性,开发者可以控制输出文档的类型、编码、格式等核心特性。

output元素的核心序列化参数
output元素支持多个属性,每个属性对应一类序列化参数,以下是常用的核心参数说明:
1. method参数
该参数用于指定输出文档的类型,可选值包括xml、html、text,也可以指定其他扩展的输出方法。默认情况下,XSLT处理器会根据转换结果的内容自动推断输出方法。
<xsl:output method="xml"/> <!-- 输出XML格式文档 --> <xsl:output method="html"/> <!-- 输出HTML格式文档 --> <xsl:output method="text"/> <!-- 输出纯文本文档 -->
2. encoding参数
该参数用于指定输出文档的字符编码,默认编码通常为UTF-8。如果需要输出其他编码的文档,可以直接设置该属性的值。
<xsl:output method="xml" encoding="GBK"/> <!-- 输出GBK编码的XML文档 -->
3. indent参数
该参数用于控制输出文档是否进行缩进格式化,可选值为yes或no,默认值为no。设置为yes可以让输出的XML或HTML文档结构更清晰,方便阅读。
<xsl:output method="xml" indent="yes"/> <!-- 输出缩进格式化的XML文档 -->
4. omit-xml-declaration参数
该参数用于控制是否省略输出文档的XML声明,可选值为yes或no,默认值为no。当输出XML文档时,如果不需要顶部的<?xml version="1.0" encoding="UTF-8"?>声明,可以将该参数设置为yes。
<xsl:output method="xml" omit-xml-declaration="yes"/> <!-- 输出不包含XML声明的XML文档 -->
5. doctype-system和doctype-public参数
这两个参数用于指定输出文档的文档类型定义(DTD)相关的系统标识和公共标识。doctype-system指定DTD的系统路径,doctype-public指定DTD的公共标识。
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/> <!-- 输出指定DTD的HTML文档 -->
6. cdata-section-elements参数
该参数用于指定输出XML文档时,哪些元素的文本内容需要使用CDATA段包裹。多个元素名称之间使用空格分隔。
<xsl:output method="xml" cdata-section-elements="script style"/> <!-- script和style元素的文本内容会使用CDATA段包裹 -->
7. standalone参数
该参数用于指定输出XML文档的standalone属性,可选值为yes或no,会体现在XML声明中,例如<?xml version="1.0" standalone="yes"?>。
<xsl:output method="xml" standalone="yes"/>
output元素的使用示例
以下是一个完整的XSLT样式表示例,展示了多个output参数的组合使用:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 配置output参数 -->
<xsl:output
method="xml"
encoding="UTF-8"
indent="yes"
omit-xml-declaration="no"
cdata-section-elements="description"
/>
<xsl:template match="/">
<root>
<xsl:for-each select="items/item">
<item>
<name><xsl:value-of select="name"/></name>
<description><xsl:value-of select="desc"/></description>
</item>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
上述样式表会将输入的XML文档转换为缩进格式的XML,编码为UTF-8,包含XML声明,且description元素的内容会使用CDATA段包裹。
注意事项
- output元素属于顶层元素,只能作为
<xsl:stylesheet>或<xsl:transform>的子元素,不能放在模板内部。 - 一个XSLT样式表中可以包含多个output元素,此时XSLT处理器会合并这些output元素的属性,如果存在冲突属性,后面的output元素属性会覆盖前面的。
- 不同的XSLT处理器可能对部分output参数的支持程度不同,实际使用时需要根据使用的处理器进行验证。