我有以下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"/>
你可以告诉我我做错了吗?
感谢
答案 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> </xsl:text>
<observedProperty/>
</xsl:template>