xml - XSL : why doesn't output indent work?

标签 xml xslt

这是我的 XSL 电子表格:

<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:element name="outer">
               <xsl:apply-templates select="elements"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="element1">
       <xsl:element name="output1">
            <xsl:element name="output1.5" />
       </xsl:element>
    </xsl:template> 

    <xsl:template match="element2">
       <xsl:element name="output2"/>
    </xsl:template> 

</xsl:stylesheet>

输入 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<elements>
    <element1>value1</element1>
    <element2>value2</element2>
</elements>

输出未根据输出 XML 层次结构缩进。这是实际输出(请注意 output1.5 和 output1 没有正确缩进):

<outer>
    <output1>
<output1.5/>
</output1>
    <output2/>
</outer>

最佳答案

您所看到的实际上是根本没有缩进的结果;缩进的两行是处理用于缩进源文档的空格的结果。

如果您要添加 <xsl:strip-space elements="*" />到您的样式表,您将在输出中完全没有缩进。

缩进实际上不是由 XSLT 处理器控制的,它是由将输出序列化为字符串的任何东西控制的,尽管这通常是由相同的方法调用完成的。我不能确定为什么 xsl:output指令没有完成这项工作,但您可以将其添加到您的 java 中:

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

并且可选地,如果你想设置缩进量:

transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

我不能肯定地说,但问题完全有可能是没有设置缩进量,而是使用 0。

关于xml - XSL : why doesn't output indent work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091633/

相关文章:

java - 我怎样才能压缩我的 XML 和 Java 代码以使我的应用程序运行更流畅

java - 在 Java 中对 XML 数据应用一个或多个 XSLT 样式表

c - 由 C libxml 和 libxslt 提供支持的 node.js

asp.net - 如何在 SDL Tridion 中使用 XSLT 将站点地图 XML 文件转换为面包屑?

java - 如何使用 XML 转换器以 Java 对象作为参数?

python - 在Python中使用XPath提取属性值

java - 在以编程方式生成的元素上按父级对齐

XML::Twig 使用 twig handlers 或 twig root 更新部分 xml 文件

Chrome 中的 Javascript 和 XML 解析

xml - 使用 xslt 重命名元素