我有一个XSL样式表在Mozilla Firefox 45中运行得非常好,我在这里制作了这样的模板:
<xsl:template match="//case/events/event/document">
<a href="{@xlink:href}">
<xsl:value-of select="@xlink:href"/>
</a>
</xsl:template>
在样式表的下方,我将此模板称为:
<xsl:apply-templates select="//case/events/event/document"/>
在Firefox中它可以正常工作,但在Google Chrome 49和Internet Explorer 9中,模板的对象直接显示在页面的头部,而不是像在Firefox中那样在页面的下方(和预期的那样)。有什么想法吗?
非常感谢提前: - )
/保
以下是完整的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : arende.xsl
Created on : 6 april, 2016
Author : Paul Bergström
-->
<!--
Declaration of usage of XLink Namespace
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/1999/xlink" exclude-result-prefixes="xlink" version="1.0">
<xsl:output method="html"/>
<!--
Attribute XLink defined as an href of simple type
-->
<xsl:template match="*[@xlink:type = 'simple' and @xlink:href]">
<a href="{@xlink:href}">
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="//case/events/event/document">
<a href="{@xlink:href}">
<xsl:value-of select="@xlink:href"/>
</a>
</xsl:template>
<xsl:template match="//case/events/event/document/attachments/attachment">
<a href="{@xlink:href}">
<xsl:value-of select="@xlink:href"/>
</a>
</xsl:template>
<xsl:template match="/">
<html>
<head>
<title>Ärendekort</title>
</head>
<body>
<h2>Ärende</h2>
<!--xsl:apply-templates select="case"/-->
</body>
</html>
<!--xsl:template match="case"-->
<table border="1" max-width="100%">
<tr bgcolor="#9acd32">
<th>Element namn</th>
<th>Innehåll</th>
</tr>
<xsl:for-each select="//case/*[not(self::events)]">
<tr bgcolor="#FBF5A4">
<td><xsl:value-of select="local-name()" /></td>
<td><xsl:value-of select="." /></td>
</tr>
</xsl:for-each>
<xsl:for-each select="//case/events/event/*[not(self::document)]">
<tr bgcolor="#00FFFF">
<td><xsl:value-of select="local-name()" /></td>
<td><xsl:value-of select="." /></td>
</tr>
</xsl:for-each>
<xsl:for-each select="//case/events/event/document">
<tr bgcolor="#00FFFF">
<td><xsl:value-of select="local-name()" /></td>
<xsl:apply-templates select="//case/events/event/document"/>
</tr>
<tr bgcolor="#00FFFF">
<xsl:for-each select="//case/events/event/document/debug_docSource">
<td><xsl:value-of select="local-name()" /></td>
<td><xsl:value-of select="." /></td>
</xsl:for-each>
</tr>
<xsl:for-each select="//case/events/event/document/attachments/attachment">
<tr bgcolor="#00FFFF">
<td><xsl:value-of select="local-name()" /></td>
<xsl:apply-templates select="//case/events/event/document/attachments/attachment"/>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
看着这段代码......
<xsl:for-each select="//case/events/event/document">
<tr bgcolor="#00FFFF">
<td><xsl:value-of select="local-name()" /></td>
<xsl:apply-templates select="//case/events/event/document"/>
</tr>
这将输出HTML,如下所示:
<tr bgcolor="#00FFFF">
<td>document</td>
<a href="http://stackoverflow.com">http://stackoverflow.com</a>
</tr>
因此,您的a
标记不在td
标记中,而是tr
的直接子标记。这让浏览器感到困惑。它确实应该在td
标签中。
所以,它可能看起来像这样
<xsl:for-each select="//case/events/event/document">
<tr bgcolor="#00FFFF">
<td><xsl:value-of select="local-name()" /></td>
<td><xsl:apply-templates select="//case/events/event/document"/></td>
</tr>
事实上,您并不需要xsl:apply-templates
中的完整xpath表达式,因为您已经定位在document
元素上。试试这个
<xsl:for-each select="//case/events/event/document">
<tr bgcolor="#00FFFF">
<td><xsl:value-of select="local-name()" /></td>
<td><xsl:apply-templates select="."/></td>
</tr>