XSLT一次性插入自定义文本

时间:2010-04-23 01:44:58

标签: xslt

folloiwng是一个预先存在的xml文件。我想知道如何使用xslt在第一个元素之前插入一个元素?

<XmlFile>
    <!-- insert another <tag> element here -->
    <tag>
        <innerTag>
        </innerTag>
    </tag>
    <tag>
        <innerTag>
        </innerTag>
    </tag>
    <tag>
        <innerTag>
        </innerTag>
    </tag>
</XmlFile>

我正在考虑使用for-each循环并测试position = 0,但是在for-each的第一次出现时已经太晚了。这是一次性文本,因此我无法将其与已存在于xsl文件中的其他xslt模板结合使用。

感谢。

1 个答案:

答案 0 :(得分:3)

你应该知道并记住一件最重要的事情:身份规则

这是一个使用最基本的XSLT设计模式的非常简单和紧凑的解决方案:使用和覆盖身份规则:

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

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

 <xsl:template match="/*/*[1]">
   <someNewElement/>
   <xsl:call-template name="identity"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换后,生成所需结果

<XmlFile>
    <!-- insert another <tag> element here -->
    <someNewElement />
<tag>
        <innerTag>
        </innerTag>
    </tag>
    <tag>
        <innerTag>
        </innerTag>
    </tag>
    <tag>
        <innerTag>
        </innerTag>
    </tag>
</XmlFile>