XSLT - 在给定节点之前添加节点

XSLT - Add node before given node

我需要在给定节点之前添加新的 xml 节点。

示例:

<doc>
  <a></a>
  <b></b>
  <c></c>
  <a></a>
  <d></d>
  <e></e>
  <a></a>
</doc>

我需要在每个 <a> 节点之前添加新的 <n> 节点。所以输出应该是

<doc>
  <n></n>
  <a></a>
  <b></b>
  <c></c>
  <n></n>
  <a></a>
  <d></d>
  <e></e>
  <n></n>
  <a></a>
</doc>

我可以在给定节点内或给定节点之后添加新节点。但我找不到在给定节点之前添加新节点的方法。

知道怎么做吗?

您可以有一个仅匹配 a 的单独模板。在该模板中,您可以添加 <n> 节点:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
    <xsl:template match="/">
        <doc>
            <xsl:apply-templates select="doc/*"/>
        </doc>
    </xsl:template>
    <xsl:template match="a">
        <n></n>
        <a></a>
    </xsl:template>
    <xsl:template match="*">
        <xsl:element name="{local-name()}"></xsl:element>
    </xsl:template>
</xsl:stylesheet>