要设置XSLT输出的缩进格式,需在xsl:stylesheet中添加xsl:output并设置indent="yes",如<xsl:output method="xml" indent="yes"/>,处理器会自动美化XML结构;但缩进效果受处理器实现、输出方法和空白处理影响,可能因处理器差异或xsl:strip-space导致缩进失效;精细控制可手动使用xsl:text插入换行与空格,但维护困难,建议结合格式化工具后处理;生产环境中为提升性能,应关闭indent以减少开销。

XSLT中要设置输出的缩进格式,核心操作其实非常直接,就是通过
xsl:output
xsl:output
indent
yes
要让XSLT输出带缩进的格式,你需要在你的XSLT样式表顶部,通常紧跟在
xsl:stylesheet
xsl:output
indent="yes"
一个基本的例子是这样的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<!-- 你的模板规则 -->
<xsl:template match="/">
<root>
<item id="1">
<name>Apple</name>
<price>1.00</price>
</item>
<item id="2">
<name>Banana</name>
<price>0.50</price>
</item>
</root>
</xsl:template>
</xsl:stylesheet>当这个样式表被应用到一个XML输入(即使是空的)时,输出结果会像这样:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">
<name>Apple</name>
<price>1.00</price>
</item>
<item id="2">
<name>Banana</name>
<price>0.50</price>
</item>
</root>你会发现,输出的XML声明
<?xml version="1.0" encoding="UTF-8"?>
root
omit-xml-declaration="yes"
我个人在实际工作中遇到过不少次,明明设置了
indent="yes"
一个主要因素是XSLT处理器的实现差异。不同的XSLT处理器(比如Saxon、Xalan、libxslt等)对
indent="yes"
再者,输出方法(method
method="html"
method="xml"
method="text"
text
空白字符处理是另一个容易被忽视的关键。XSLT中,
xsl:strip-space
xsl:preserve-space
xsl:strip-space
有时候,输出中包含CDATA节或注释也可能导致缩进出现“断层”。处理器在处理这些特殊节点时,为了保持其原样,可能会暂时中断正常的缩进逻辑。
所以,如果你的缩进效果不理想,不妨从这几个方面入手检查一下:你用的是哪个XSLT处理器?
xsl:output
method
说实话,XSLT的
indent="yes"
div
p
如果真的需要精细到元素级别的缩进控制,
indent="yes"
一种方法是手动插入空白字符。你可以使用
xsl:text


<xsl:template match="myElement">
<xsl:text>
 </xsl:text><!-- 插入一个换行和四个空格 -->
<myElement>
<xsl:apply-templates/>
</myElement>
<xsl:text>
</xsl:text><!-- 插入一个换行 -->
</xsl:template>这种方式虽然能实现精确控制,但它的缺点也很明显:极其繁琐且难以维护。一旦缩进规则变化,你需要修改大量的模板。而且,它很容易和
indent="yes"
更实际的做法是,接受indent="yes"
关于XSLT的缩进功能,有一个不常被提及但很实际的考量点,那就是它对性能的影响。我不是说
indent="yes"
当XSLT处理器被要求
indent="yes"
对于小型XML文件或开发调试阶段,这种性能开销几乎可以忽略不计。我们希望输出结果是美观的,方便人眼阅读和检查,所以
indent="yes"
然而,如果你的XSLT正在处理非常庞大的XML文件(比如几百MB甚至GB级别),或者你的系统需要处理高并发的XSLT转换请求(例如作为API网关的一部分,转换请求和响应),那么
indent="yes"
我的建议是,在生产环境下,尤其是在进行机器对机器通信(M2M)或者处理大数据量的转换时,通常应该禁用indent
indent="no"
no
indent="yes"
以上就是XSLT如何设置输出缩进格式?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号