xml - 使用 XSL 将 2 个 XML 文件合并为 1 个

标签 xml xslt

我找不到合适的示例将 2 个 XML 文件合并为 1 个,如下所示:

电影.xml

<movies>
    <movie>
        <name>ET</name>
        <director>Steven Spielberg</director>
        <date>15 January 2000</date>
    </movie>
    <movie>
        <name>The Neverending Story</name>
        <director>Steven Spielberg</director>
        <date>4 November 2006</date>
    </movie>
</movies>

目录.xml

<directors>
    <director>
        <name>Steven Spielberg</name>
        <age>55</age>
        <sex>male</sex>
    </director>
</directors>

要求的输出:

<directors>
    <director>
        <name>Steven Spielberg</name>
        <age>55</age>
        <sex>male</sex>
        <movies>
            <movie>
                <name>ET</name>
                <date>15 January 2000</date>
            </movie>
            <movie>
                <name>The Neverending Story</name>
                <date>4 November 2006</date>
            <movie>
        </movies>
    </director>
</directors>

XSL:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method = "xml" indent = "yes" /> 

    <xsl:variable name="movieFile" select="document('movies.xml')" />

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="$movieFile/movies/movie/director">
        <xsl:copy>
            <xsl:apply-templates />
      </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

目前,它正在打印每个电影组中的整个导演列表。

有人可以给我一些指导吗?

最佳答案

如果您将第二个模板替换为这个模板,并将“directors.xml”文件作为输入,它应该可以工作:

<xsl:template match="director">
    <xsl:variable name="director-name" select="name"/>
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" />
    <xsl:apply-templates select="document('movies.xml')/movies/movie[director=$director-name]" />
    </xsl:copy>
</xsl:template>

除了上面的 director 节点外,您使用标识模板复制每个节点,您在其中添加 movie 文件的匹配内容。

关于xml - 使用 XSL 将 2 个 XML 文件合并为 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693271/

相关文章:

java - 无法将用户带到通知设置

xml - 遇到错误 #1067 : Implicit coercion of a value of type String to an unrelated type XML - AS3

javascript - 通过 (JavaScript) 在 IE 中将样式表 (XSL) 应用于 (XML) 时出现问题

java - 如何在 java 的另一个 xml 文档中插入一个 xml 节点作为第一个子节点?

Xmlstarlet,多个元素和日期排除

xml - 我需要根据同级节点的索引和值对 xslt 中的某些节点求和

xslt - 需要使用 XSL FO 缩放图像以适应

xslt - 有没有办法在 XSL-FO 中使用相当于 'rowspan' 的值?

xslt - XSL(T) 当前/上一个/下一个

xml - CakePHP 生成 XML