一个xml和几个xsl(几个视图)

时间:2012-04-15 17:52:01

标签: xml xslt

我给你一些背景来解释我的问题:

我有一个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文件的情况下执行此操作。

感谢您的帮助。 朱莉

1 个答案:

答案 0 :(得分:1)

我不知道你从哪里得到<xml-file>的想法:对我来说这是一个新的想法。但是你可以通过在样式表中处理它来使它工作:

<xsl:template match="xml-file">
  <xsl:apply-templates select="document(@href)/catalog"/>
</xsl:template>

请注意match =“/”模板,该模板现在匹配任一文档的根,这很容易导致无限递归。

如果事情变得更复杂,你需要做的另一种方法是编写客户端Javascript来调用转换而不是使用xml-stylesheet处理指令。