在XSLT中的结果文档中保留源文档的缩进



我一直在使用Oxygen XML编辑器进行XSL转换(XSLV.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 pathsaxon9he.jar net.sf.saxon.Transform -t -s:pathsource.xml -xsl:pathtransformation.xsl -o:pathresult.xml

除了源代码在一个特定的DTD中这一事实。当我删除源代码开头提到的DTD时,缩进保持不变,否则就没有缩进。这是什么原因?我该如何更改?

谢谢!玛丽亚(我是个初学者(

如果:

(a( 您不会从输入文档中剥离空间

(b( 样式表将包括空白文本节点在内的所有文本节点复制到结果树

(c( 您不使用序列化进行缩进

那么结果的缩进应该与源相同。

如果这种情况没有发生,那么我们需要了解你正在做什么的细节。有很多方法会让空白出错,如果不了解细节,就不可能知道哪里出错了。

(顺便说一句,你可以在xsl:output上使用类似suppress-indentation="p"的东西来获得段落级别以上但不在段落内的缩进。(

最新更新