有一个小的XSLT问题

时间:2016-04-06 06:25:46

标签: xml xslt

我有一个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中那样在页面的下方(和预期的那样)。有什么想法吗?

非常感谢提前: - )

/保

只是澄清一下。该链接应该像在Firefox中一样显示在表格的正确位置,但在Chrome和资源管理器中,链接会立即显示在页面顶部,并且它在表格中的位置为空白。

以下是完整的样式表:

<?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>

1 个答案:

答案 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>