我想使用单个XSLT样式表文档格式化不同的XML文档。 如何使用XSLT执行以下操作:
设置不是特定于预定义的标记或节点,而是特定于整个XML
答案 0 :(得分:1)
XSLT通常用于更改文档的结构或内容。在大多数情况下,XML文档中元素的缩进纯粹是cosmetical,因为仅空白文本节点通常不重要。也就是说,有一种有效的方法可以正确地缩进任何XML文档,即指定<xsl:output indent="yes"/>
的身份转换。但是,缩进字符的数量将取决于您正在使用的XSLT处理器的实现。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
将改变
<?xml version="1.0" encoding="UTF-8"?>
<body><h1></h1></body>
到
<?xml version="1.0" encoding="UTF-8"?>
<body>
<h1/>
</body>
您可以生成一个文档,该文档在一定数量的字符后包装文本,但这通常不是通过XSLT完成的。 XSLT转换数据,不打算用作渲染代理。换行是应该在显示数据的工具中强制执行的操作,如编辑器。许多编辑器都有换行选项,例如使文档适合当前窗口大小。
因此,总而言之,如果特定数量的空格和换行符号是您要对文档进行的唯一更改,请不要使用XSLT。前者是不可能的,后者也许是荒谬的 - 除非有充分的理由去做。
答案 1 :(得分:1)
- 3个空格的缩进?
醇>
如果您使用的是Xalan处理器,可以将xsl:output
设置为:
<xsl:output method="xml" version="1.0" encoding="UTF-8" xalan:indent-amount="3"/>
否则最好将输出设置为:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
让处理器应用其编程的缩进量以应用。
-
在(不太可能)的情况下,必须具有正好3个空格的缩进,您可以尝试沿着这些行:
<xsl:variable name="spaces" select="' '" />
<xsl:template match="*">
<xsl:variable name="indent" select="concat(' ', substring($spaces, 1, 3*count(ancestor::*)))" />
<xsl:value-of select="$indent" />
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()"/>
<xsl:value-of select="$indent" />
</xsl:copy>
</xsl:template>
显然这需要更多的工作(我不愿意投入其中)。
- 100个字符后包裹线?
醇>
我认为你的意思是文本节点?如果通过XSLT完成,则必须修改实际文本,因此它将超出&#34;格式化#34;的定义。