合并两个XML文件,同时使用XSL转换它们

时间:2016-05-18 17:10:39

标签: html xml xslt

我有两个XML文件,我想使用XSL将其转换为一个HTML文件。

我在Linux终端中使用xsltproc first.xml transform.xsl > output.html命令对它们进行转换。来自first.xml的值可以完美地工作并转换为HTML,但我也无法强制second.xml工作。它只是没有出现在文件中。我知道在StackOverflow上有这样的问题,但我仍然无法弄清楚我做错了什么。 match = "document('effects.xml')/effects"似乎有问题,但我不知道到底是什么。

first.xml

<elements>
  <listOfElements>
    <element>
      *some data*
    </element>
    <element>
      *some data*
    </element>
   </listOfElements>
</elements>

second.xml

<effects>
  <effect>
    <name> NAME1 </name>
    <cost> COST1 </cost>
  </effect>
  <effect>
    <name> NAME2 </name>
    <cost> COST2 </cost>
  </effect>
  <effect>
    <name> NAME3 </name>
    <cost> COST3 </cost>
  </effect>
</effect>

transform.xsl

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

<xsl:template match="/">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text>
<html>
  <head>
    <meta charset="UTF-8"/>
    <link rel="stylesheet" type="text/css" href="styl.css"/>
  </head>
  <body>
    <xsl:apply-templates select="elements"/>
    <xsl:apply-templates select="effects"/>
  </body>
</html>
</xsl:template>

<xsl:template match="elements">
 <div>
  THIS WORKS
 </div>
</xsl:template>

<xsl:template match="document('effects.xml')/effects">
<div>
  <xsl:for-each select="effects/effect">
    <div>
      <p><xsl:value-of select="name"/></p>
    </div>
  </xsl:for-each>
</div>
</xsl:template>

1 个答案:

答案 0 :(得分:1)

使用<xsl:apply-templates select="document('effects.xml')/effects"/>,然后使用match="effects"<xsl:for-each select="effect">