哪种方法可以更好地删除XML中的冗余空格[strip-space或indent ="no"]?

Inf*_*nd' 7 xml xslt

我想在单行中打印输出xml [在记事本或其他简单的文本编辑器中查看],以便删除xml文件中的冗余空格.那么哪个更好的方法呢?

我认为有两种选择,
1)使用

  <xsl:output method="xml" indent="no"/>
Run Code Online (Sandbox Code Playgroud)

2)或使用

  <xsl:strip-space elements="*"/>
Run Code Online (Sandbox Code Playgroud)

哪个更有效率,为什么?
有人建议我用indent="no",

我认为条形空间最适合,但不确定,因为其他人提出的建议.

为了更详细,让我举一个例子:
输入XML:

<root>
 <node>
   <child1/>
   <child2/>
 </node>
</root>
Run Code Online (Sandbox Code Playgroud)

并且所需的输出是:

<root><node><child1/><child2/></node></root>
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 12

为了消除任何看起来像"缩进"的东西,可能有必要(这意味着在你需要的情况下)使用两者 <xsl:strip-space>``indent ="no"`.

举一个最简单的例子:你有身份转换.如果没有指定任何两种方法,转换将从源XML文档重现仅空白空间的文本节点.也就是说,如果源XML文档是缩进的,那么转换也会产生缩进结果.

现在,添加到此转换<xsl:output indent="no" />.这指示XSLT处理器不要执行自己的"漂亮打印".但是,源XML文档中仅包含空白的节点仍然会复制到输出中,结果文档看起来仍然是缩进的(因为源文档是缩进的).

现在,作为最后一步,添加<xsl:strip-space elements="*"/>.您已指定两种方法来阻止输出中仅限空白的节点.怎么了?XSLT处理器根本不处理只有空白空间的节点,并且它不会缩进输出 - 您可以获得所需的单线密集输出.

最后,做一个回归,改变<xsl:output indent="no" /><xsl:output indent="yes" />.<xsl:strip-space elements="*"/>仍然存在,所以没有空白节点在输出再现.但是XSLT处理器遵循该<xsl:output indent="yes" />指令并添加了自己的仅空白文本节点.

因此,从四种可能的组合中,仅指定两者 <xsl:strip-space elements="*"/><xsl:output indent="no" />保证不会从源XML文档或XSLT处理器计划中的仅空白节点引起缩进.

当然,即使是最后一种情况也不能完全保证输出不会缩进 - 如果XSLT程序员故意将缩进代码放在那里,例如

<xsl:text>

</xsl:text>

输出将包含此缩进.