我找不到合适的示例将 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/