我有两个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'><!DOCTYPE html></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>
答案 0 :(得分:1)
使用<xsl:apply-templates select="document('effects.xml')/effects"/>
,然后使用match="effects"
和<xsl:for-each select="effect">
。