xml - 在 XSLT 的结果文档中保留源文档的缩进
问题描述
我一直在使用 Oxygen XML 编辑器进行 XSL 转换(XSL v. 2 样式表上的 Saxon-HE 9.8.0.8),并且源文档和结果文档的缩进是相同的:这正是我所需要的。
当我从命令行(Saxon-HE 9.8.011J,Java 版本 1.8.0_161)运行 XSLT 时,我没有得到相同的结果(结果文档根本没有缩进)。我能做些什么来改变这一点吗?
(<xsl:output indent="yes"/>
也会缩进我不需要的内联元素,<xsl:strip-space elements/>
会删除内联元素之间的一些必要空格)。
来源:
<chapter id="ch3">
<title>Sed quam, quaes apiducius nit peror asperch icatiat</title>
<section id="s1">
<title>Et faccae sitiaessum res re dolorer errovitam,</title>
<paragraph id="p6">
<text>lorerit ab is arum dolore quaepudit exped magnate mpelestinus volupta</text>
</paragraph>
<paragraph id="p7">
<text>lorerit ab is arum <span class="s1">dolore</span> <span class="s2">quaepudit</span> exped magnate mpelestinus volupta</text>
</paragraph>
<paragraph id="p12">
<text>lorerit ab is arum dolore quaepudit exped magnate mpelestinus volupta</text>
</paragraph>
</section>
</chapter>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:template match="*">
<xsl:element name="{local-name()}" >
<xsl:for-each select="@*" >
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="paragraph">
<xsl:element name="paragraph">
<xsl:attribute name="id">p<xsl:number count="paragraph" from="chapter" level="any"></xsl:number>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
命令行代码
java -cp path\saxon9he.jar net.sf.saxon.Transform -t -s:path\source.xml -xsl:path\transformation.xsl -o:path\result.xml
除了源代码在特定的 DTD 中这一事实。当我删除源代码开头提到的DTD时,缩进保持不变,否则没有缩进。这是什么原因,我该如何改变它?
谢谢!玛丽亚(我是个初学者)
解决方案
如果:
(a) 您不会从输入文档中剥离空间
(b) 您的样式表将包括空白文本节点在内的所有文本节点复制到结果树
(c) 你不用序列化缩进
那么结果的缩进应该与源相同。
如果这没有发生,那么我们需要查看您正在做什么的详细信息。弄错空格的方法有很多,如果不看细节就不可能知道哪里出错了。
(顺便说一句,您可以使用类似suppress-indentation="p"
onxsl:output
来获得段落级别以上的缩进,但不能在段落内。)
推荐阅读
- ios - 字符串不是空时被验证为空
- identityserver4 - 使用 IdentityServer4 从数据库显式登录/注销自定义用户
- arrays - 不能在属性初始化程序中使用实例成员“国家”;属性初始化程序在“自我”可用之前运行
- javascript - 粘性菜单/导航,固定菜单时框阴影不起作用
- types - 榆树中的“数字”是什么
- javascript - 使用 onclick() 从数据库中获取详细信息
- php - php检测浏览器是在服务器还是客户端上运行
- visual-studio - 添加和替换数据列表框 (Visual Studio 2013)
- python-3.x - Python over SSH - 事件检测不起作用
- microcontroller - 处理 msp430fr5969 上的多优先级中断