删除节点时 XSLT 缩进丢失

XSLT indentation lost when removing a node

我有以下 xml 文件

    <?xml version="1.0" encoding="UTF-8"?>
<start>
    <param_1>          
        <short_name>parameter_a</short_name>
    </param_1>
    <param_2>          
        <short_name_2>parameter_b</short_name_2>
    </param_2>
</start>

我有以下 XSLT 文件:

<?xml version="1.0" encoding="UTF-8"?>        
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xlink="http://www.w3.org/1999/xlink">
        <xsl:output method="xml" indent="yes" encoding="utf-8" />       
    <xsl:template match="/" >  
        <gml:description>
                    <xsl:value-of select="document('/path/to/mydoc.xml')/start/param_1/short_name"/>
    </gml:description>
    <gml:description>
            <xsl:for-each select="document('/path/to/mydoc.xml')/start/param_2">
                <xsl:variable name="my_xlink" select="short_name_2"/>
                    <xsl:value-of select="$my_offering1_observed_property_xlink"/>    
                <om:observedProperty xlink:href="{$my_offering1_observed_property_xlink}"/>
                </xsl:for-each>
    </gml:description>
 </xsl:template>
</xsl:stylesheet>   

这是我得到的输出

<?xml version="1.0" encoding="utf-8"?>
<gml:description>parameter_a</gml:description>
<gml:description>parameter_b<om:observedProperty xlink:href="parameter_b"/></gml:description>

问题是我想要的是这个结果

<?xml version="1.0" encoding="utf-8"?>
    <gml:description>parameter_a</gml:description>
    <om:observedProperty xlink:href="parameter_b"/>

但是如果我从我的 XSLT 文件节点中删除 <gml:description>,最后的 xml 会丢失缩进:

<?xml version="1.0" encoding="utf-8"?>
        <gml:description>parameter_a</gml:description><om:observedProperty xlink:href="parameter_b"/>

你能告诉我我做错了什么吗?

谢谢

这似乎是 libxslt 处理器的一个怪癖。我已经使用这个最小样式表成功地重现了这个问题:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <description/>
    <observedProperty/>
</xsl:template>

</xsl:stylesheet>

哪个returns:

<?xml version="1.0" encoding="UTF-8"?>
<description/><observedProperty/>

我不知道是否有解决方法*,因为我无法重现您的原始结果。由于两种情况下的结果都是 XML 片段,没有根元素,我不确定您是否有合理的理由抱怨。


(*) 当然,明显的除外:

<xsl:template match="/">
    <description/>
    <xsl:text>&#10;</xsl:text>
    <observedProperty/>
</xsl:template>