0

我给你一些上下文来解释我的问题:

我有一个 xml 文件和一个 xsl 文件,如下所示:

数据.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。

我试过这个:

视图1.xml:

<?xml-stylesheet type="text/xsl" href="overview.xsl"?>
<xml-file href="data.xml" />

视图2.xml:

<?xml-stylesheet type="text/xsl" href="extended.xsl"?>
<xml-file href="data.xml" />

我删除了这一行:

<?xml-stylesheet type="text/xsl" href="overview.xsl"?>

来自数据.xml

我希望能够在阅读 view1.xml 时使用 overview.xsl 阅读我的 CD 目录,并在阅读 view2.xml 时阅读相同的 CD 目录但使用extended.xsl 的格式。

但它只是部分起作用。不知何故,我的overview.xsl 再也找不到节点了。我获得了一个标题为 ab html table 但其中没有数据的网页。我想,我需要改变:

<xsl:for-each select="catalog/cd">

到别的东西。你有什么主意吗?

作为信息,我试图在不使用 javascript 加载另一个 xsl 文件的情况下执行此操作。

谢谢你的帮助。朱丽叶

4

1 回答 1

1

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

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

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

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

于 2012-04-15T21:48:06.247 回答