结合xml,xpath或xquery

时间:2016-11-04 17:39:16

标签: xml xslt xpath xquery

<main>
    <parent>
        <parentId>parentId1</parentId>
        <aParentField>aParentValue
        </aParentField>
    </parent>
    <child>
        <parentId>parentId1</parentId>
        <aChildField>aChildValue
        </aChildField>
    </child>
</main>

我是XML的新手,并尝试使用ID作为参数进行组合A和B,因此结果应该是:

<main>
    <parent>
        <parentId>parentId1</parentId>
        <aParentField>aParentValue
        </aParentField>
        <child>
            <aChildField>aChildValue
        </aChildField>
        </child>
    </parent>
</main>

可以使用什么以及如何使用?

1 个答案:

答案 0 :(得分:2)

这个例子有点含糊不清。假设您的输入可以包含多个parent个节点,每个节点都链接到多个child节点,我建议您使用 key 来解析交叉引用:< / p>

XSLT 1.0

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

<xsl:key name="child" match="child" use="parentId" />

<xsl:template match="/main">
    <xsl:copy>
        <xsl:apply-templates select="parent"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="parent">
    <xsl:copy>
        <xsl:copy-of select="*"/>
        <xsl:apply-templates select="key('child', parentId)"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="child">
    <xsl:copy>
        <xsl:copy-of select="*[not(self::parentId)]"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>