删除节点时XSLT缩进丢失

时间:2017-02-09 10:45:36

标签: xslt indentation

我有以下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"/>
你可以告诉我我做错了吗?

感谢

1 个答案:

答案 0 :(得分:1)

这似乎是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>

返回:

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

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

(*)当然,除了显而易见的:

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