XSLT - 合并具有不同本地名称的两个元素节点

时间:2013-06-11 18:50:48

标签: xml xslt libxml2 libxslt

我想使用XSLT合并两个本地名称不同的元素节点。

e.g。合并file1.xml

<A>
    <B>
        <C>
            <D>Value</D>
        </C>
    </B>
    <G>
        <C>
            <H>Value</H>
        </C>
    </G>
</A>

with file2.xml

<A>
    <E>
        <C>
            <F>Value</F>
        </C>
    </E>
</A>

获取输出file3.xml

<A>
    <B>
        <C>
            <D>Value</D>
            <F>Value</F>
        </C>
    </B>
    <G>
         <C>
            <H>Value</H>
            <F>Value</F>
        </C>
    </G>
</A>

我基本上想把E视为通配符。这可能吗?如果是这样,你能提供一些适用于此的XSLT吗?我已经尝试了几个小时,似乎无法提出解决方案。

编辑:要求尝试...... 这个XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="A">
    <xsl:copy>
        <xsl:apply-templates select="*"/>
        <xsl:apply-templates select="document('file1.xml')/A/node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="C">
    <xsl:copy>
        <xsl:apply-templates select="*"/>
        <xsl:apply-templates select="document('file1.xml')/A/./C/*" />
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

给出了这个输出:

<?xml version="1.0"?>
<A><E>
    <C><F>Value</F></C>
</E>
<B>
    <C><D>Value</D></C>
</B>
<G>
    <C><H>Value</H></C>
</G>
</A>

0 个答案:

没有答案