0

我有一个 XML 文件,我想在两个单独的网页上显示它,并带有两个不同的样式表。问题是样式表是在 XML 文件中指定的,这通常会排除这种情况。我试图通过从转换本身拆分数据并将其作为单独的文件包含在内来解决此问题。像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="news.xsl" type="text/xsl"?>
<!DOCTYPE doc [
<!ENTITY items SYSTEM "news_items.xml">
]>
<wrapper>
&items;
</wrapper>

这里的 news_items.xml 是一个没有标题的纯 XML 文件,只有一个根节点,如下所示:

<items>
  <item>
    ---
  </item>
  <item>
    ---
  </item>
  <item>
    ---
  </item>
</items>

样式表 news.xsl 遍历重复节点,并产生格式良好的输出。这种安排允许我使用不同的样式表重复练习,而不会复制数据。它适用于 Chrome,但不适用于 IE 或我所针对的任何 webkit 浏览器。

有一个更好的方法吗?我希望能够使用单个 XML 文件,因为内容是相当动态的。

后来:我实际上在服务器端解决了这个问题,使用 PHP XSLTProcessor 类。根据提出的问题的条款,这不是一个选项,为此我深表歉意。这不是我特别熟悉的领域,即使他们提交了完美的解决方案,我也没有能力将赏金奖励给任何人。对于那个很抱歉。

4

4 回答 4

6

您可以使用没有包含样式表调用的实际数据的虚拟 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="YOUR_STYLESHEET.xsl"?>
<root/>

样式表本身不使用虚拟数据,而是通过“document()”获取真实数据:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:apply-templates select="document('YOUR_DATA_FILE.xml')/YOUR_XPATH"/>
  </xsl:template>
  ...use templates to do something...
</xsl:stylesheet>
于 2013-06-25T06:59:37.890 回答
2

您可以对 XSLT 模板进行参数化,并且基于 XSLT 参数,您可以应用这个或那个模板 ( xsl:call-template)。

<xsl:param name="style" select="defaultStyle"/>

<xsl:template name="adjustStyle" match="/">
    <xsl:choose>
        <xsl:when test="$style = 'defaultStyle'">
            <xsl:call-template ...>
        </xsl:when>
        <xsl:otherwise>
            <xsl:call-template ...>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
于 2013-06-25T12:00:31.327 回答
0

I don't have the reputation to comment yet, but this is in response to your question in the comments.

If you have access to the style sheets, you can use <xsl:template match="<INSTERT ELEMENT HERE"> to specify styling to specific parts of your xml file. Here is some documentation. That way, you don't need to include a separate file, just make several templates within the same XSL file.

于 2013-06-21T15:39:06.887 回答
0

1)对于同一个xml有不同的样式表,所以就变成了

<html>
<head>
link to your conditional stylesheet
</head>
<body>
Your transformed html from xml that remains same in both conditions
</body>

2)使用条件生成不同的输出:-

 <xsl:if test="your condition in xml">
于 2013-06-25T05:38:26.167 回答