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模板结合使用。
感谢。
答案 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>