xslt在元素后添加处理指令

xslt add processing instruction after element

在下面XML:

   <?xml version="1.0" encoding="utf8" ?>
<Output>
    <Error>
        <Status>0</Status>
        <Details>No errors</Details>
    </Error>
    <Synopsis>
        <Count>451</Count>
    </Synopsis>
    <BankAccounts>
        <BankAccount AcctNo="103" CustName="Frank" BalanceAmount="" Inactive="N" NoOfAccounts="1" >
            <Addresses>
                <Address>ABC</Address>
                <Address>XYZ</Address>
            </Addresses>
        </BankAccount>
        <BankAccount AcctNo="101" CustName="Jane" BalanceAmount="10005" Inactive="N" NoOfAccounts="1" >
            <Addresses>
                <Address>LMN</Address>
                <Address>QWE</Address>
            </Addresses>
        </BankAccount>
        
    </BankAccounts>
</Output>

我想在 Synopsis 之后和 BankAccounts 之前添加处理指令:

 <?xml-multiple BankAccount
        ?>

尝试使用以下 XSLT,但它在内部插入 PI 'BankAccounts' 我如何使用 XSLT 执行此操作?

<xsl:template match="BankAccounts">
    <xsl:copy>
        <xsl:processing-instruction name="xml-multiple">
            BankAccount
        </xsl:processing-instruction>
        
        <xsl:apply-templates select="@*|node()"/>
        
    </xsl:copy>
</xsl:template>

如果你想让处理指令出现在BankAccounts之前,那么在复制之前把它写到输出中BankAccounts:

<xsl:template match="BankAccounts">
    <xsl:processing-instruction name="xml-multiple">BankAccount</xsl:processing-instruction>
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

在 XSLT 2.0 或更高版本中,您可以将其缩短为:

<xsl:template match="BankAccounts">
    <xsl:processing-instruction name="xml-multiple">BankAccount</xsl:processing-instruction>
    <xsl:next-match/>
</xsl:template>

(假设您有 身份转换 模板或等效模板)。


或者 - 在任何版本中 - 你可以简单地做:

<xsl:template match="BankAccounts">
    <xsl:processing-instruction name="xml-multiple">BankAccount</xsl:processing-instruction>
    <xsl:copy-of select="."/>
</xsl:template>