如何插入与前一个元素具有相同缩进的元素

时间:2014-09-24 23:34:12

标签: xml xslt

假设以下xml:

<def>
  <config>
        <a>foo</a>
  </config>
</def>

我想插入另一个配置&#34; b&#34;。我需要保留当前的格式化。因此,我认为我必须关心&#34; b&#34;为了我自己?我想要实现的是以下结果:

<def>
  <config>
        <a>foo</a>
        <b>bar</b>
  </config>
</def>

请注意,缩进的大小不同。因此新创建的元素应与前一个元素对齐。如果同一级别上没有前一个元素,则缩进应该是父级缩进加2。

1 个答案:

答案 0 :(得分:1)

我不明白为什么这会产生任何影响,但作为练习,请尝试:

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

<xsl:preserve-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="config/*[last()]">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    <xsl:copy-of select="preceding-sibling::text()[1]"/>
    <b>bar</b>
</xsl:template>

</xsl:stylesheet>