如果我的问题太容易而且不属于此,我很抱歉。我正在进行一项任务,我有一个XML源文档,其中一个样式表声明链接到一个输出为HTML的XSL。现在一切正常,但是这个页面需要是不同页面上的链接。这个其他页面(我假设我将它编码为一个简单的HTML文件)还需要第二个链接,它将使用我已经使用的相同XML源文档中的信息执行一些计算。我想我错过了一些简单的东西,但是如何使用相同的XML创建另一个页面呢?
XML:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="cookies.xsl" ?>
<cookies>
<cookie>
<brand>Oreo</brand>
<name>Double Stuff</name>
<nutritional_info>
<calories>150</calories>
<fat>20</fat>
<sugar>5</sugar>
<protein>1</protein>
</nutritional_info>
</cookie>
<cookie>
<brand>Oreo</brand>
<name>Golden Oreo</name>
<nutritional_info>
<calories>190</calories>
<fat>7.6</fat>
<sugar>13.7</sugar>
<protein>1.5</protein>
</nutritional_info>
</cookie>
<cookie>
<brand>Oreo</brand>
<name>Sandwich Cookie</name>
<nutritional_info>
<calories>140</calories>
<fat>7.0</fat>
<sugar>13.0</sugar>
<protein>1.0</protein>
</nutritional_info>
</cookie>
<cookie>
<brand>Archway</brand>
<name>Dutch Cocoa</name>
<nutritional_info>
<calories>110</calories>
<fat>3.6</fat>
<sugar>16.0</sugar>
<protein>1.1</protein>
</nutritional_info>
</cookie>
XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method ="html" version="4.0" />
<xsl:template match="/">
<html>
<head>
<title>Cookies</title>
<link href="cookies.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1 id="header"><img src="header.jpg" alt="cookies" height="150" width="100%"/></h1>
<h1>Nutritional Info</h1>
<h2 id="n_info">
<xsl:apply-templates select="cookies/cookie"/>
</h2>
</body>
</html>
</xsl:template>
<xsl:template match="cookie">
<h2><xsl:value-of select="@brand"/> <xsl:value-of select="name"/></h2>
<xsl:for-each select=".">
<p><img src="{name}.jpg" id="picture"/>
</p>
<xsl:apply-templates select="nutritional_info"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="nutritional_info">
<table border="1" id="info">
<tr>
<th>Calories</th>
<th>Protein</th>
<th>Total Fat</th>
<th>Sugar</th>
</tr>
<tr>
<xsl:apply-templates select="calories"/>
<xsl:apply-templates select="protein"/>
<xsl:apply-templates select="fat"/>
<xsl:apply-templates select="sugar"/>
</tr>
</table>
</xsl:template>
<xsl:template match="calories|protein|fat|sugar">
<td><xsl:value-of select="."/></td>
</xsl:template>
我想创建一个链接,使用此样式表打开xml,然后使用另一个链接,它将应用不同的样式和模板,但使用相同XML文件中的相同信息。
答案 0 :(得分:1)
有几种方法可以实现这一目标:动态输入文件,使用XSLT 2.0功能或只有两个XML文件。
动态输入
如果要动态创建输入XML文件(即在事件发生时刷新),请确保以下行:
<?xml-stylesheet type="text/xsl" href="cookies.xsl" ?>
指的是正确的XSLT样式表,根据哪个链接被点击。
XSLT功能
否则,可以使用result-document()
函数从同一样式表中输出多个HTML文件。但是,只有在您拥有XSLT 2.0时才能使用此选项(请参阅:XSLT: :result-document)。从样式表来看,我假设您不使用XSLT 2.0处理器。
即使XSLT 1.0不包括输出多个文件,EXSLT也会这样做(参见例如:Splitting XML into multiple files with XSLT)。
复制并重命名XML
作为最后的手段,手动操作输入XML。复制XML数据并更改上面引用的引用行。请注意cookies1.xml
包含
<?xml-stylesheet type="text/xsl" href="cookies1.xsl" ?>
并且cookies2.xml
包含
<?xml-stylesheet type="text/xsl" href="cookies2.xsl" ?>
请注意,出现此问题的原因仅在于您对XML文件中样式表的引用进行了硬编码。