我给你一些背景来解释我的问题:
我有一个xml文件和一个xsl文件,如下所示:
data.xml中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="overview.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
和overview.xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
当我在Firefox中打开data.xml时,一切都很好,并且工作方式与我想要的一样。 现在,我想对我的CD目录有2个视图。一个视图是“概述”,一个是“扩展”,这意味着,我需要2个不同的xsl。
我试过了:
view1.xml:
<?xml-stylesheet type="text/xsl" href="overview.xsl"?>
<xml-file href="data.xml" />
view2.xml:
<?xml-stylesheet type="text/xsl" href="extended.xsl"?>
<xml-file href="data.xml" />
我删除了这一行:
<?xml-stylesheet type="text/xsl" href="overview.xsl"?>
来自data.xml
我希望能够在阅读view1.xml时使用overview.xsl读取我的CD目录,并在读取view2.xml时读取相同的CD目录,但格式为extended.xsl。
但它只是部分有效。不知怎的,我的overview.xsl再也找不到节点了。我获得了一个标题为ab html表但没有数据的网页。我想,我需要改变:
<xsl:for-each select="catalog/cd">
到别的地方。你有什么想法吗?
作为信息,我试图在不使用javascript加载另一个xsl文件的情况下执行此操作。
感谢您的帮助。 朱莉
答案 0 :(得分:1)
我不知道你从哪里得到<xml-file>
的想法:对我来说这是一个新的想法。但是你可以通过在样式表中处理它来使它工作:
<xsl:template match="xml-file">
<xsl:apply-templates select="document(@href)/catalog"/>
</xsl:template>
请注意match =“/”模板,该模板现在匹配任一文档的根,这很容易导致无限递归。
如果事情变得更复杂,你需要做的另一种方法是编写客户端Javascript来调用转换而不是使用xml-stylesheet处理指令。