如何在浏览器中查看xsl输出?

2023-12-12

每个人!

我正在构建一个基于一些 xml 数据文件的网站,因此我选择使用 XSLT 来绑定浏览器中的样式表。

一开始它工作得很好,但最近,随着模板变得越来越复杂,一些奇怪的事情发生了。

我使用“copy-of”元素将数据复制到样式表中。这是代码:

<div class="section1">
    <xsl:copy-of select="article/bodydata/*" />
</div>

因此,基本上,我将“bodydata”节点的所有子元素复制到

中。

但这不起作用。例如,我在 bodydata 中有一个 元素,如果我在浏览器中访问 xml 文件,则该图像不会出现。另一方面,如果我手动将“bodydata”元素复制到该 div 中,并将 .xsl 文件制作为 .html 文件,则该图像确实会显示。

那么,我的问题是,我可以在浏览器中查看 xml 数据和 xsl 数据的组合输出吗?我需要延期还是什么?

对可能出现的问题有什么建议吗?我对 xslt 还很陌生,所以我似乎误解了 XSLT 的真正用途。谢谢!

UPDATE

为了说明这个问题,我写了一个小例子。

首先,我创建了一个示例 xml 数据文件:

<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="article.xsl"?>
<article>
    <bodydata>
        <center>
            <img alt="sample" src="http://www.google.com/logos/classicplus.png" />
        </center>
        <p>
          <data class="tts_data">
          this is the paragraph.
          </data>
        </p>
        <p>
          <data class="tts_data">this is the second paragraph</data>
          <data class="tts_data">more data</data>
          <data class="tts_data">...</data>
        </p>
    </bodydata>
</article>

所以,你可以看到,“bodydata”元素中的所有节点都是需要在网页上显示的html元素。为了显示这一点,我创建了一个示例 xsl 文件。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
      <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <meta name="robots" content="noindex" />
        </head>
        <body>
          <article>
           <header>
                  header of the article
               </header>
               <section>
                  <xsl:copy-of select="article/bodydata/*" />
           </section>
      </article>
          <footer>
          footer part of the page
          </footer>
        </body>
     </html>
    </xsl:template>
</xsl:stylesheet>

And the result is like this: the xslt result The img element just disappears.

接下来,我将 bodydata 元素复制到节部分,并形成一个新的 html 文件。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="robots" content="noindex" />
</head>
<body>
  <article>
    <header>
     header of the article
    </header>
    <section>
      <center>
        <img alt="sample" src="http://www.google.com/logos/classicplus.png" />
      </center>
      <p>
        <data class="tts_data">
        this is the paragraph.
        </data>
      </p>
      <p>
        <data class="tts_data">
        this is the second paragraph, 
        </data>
        <data class="tts_data">
        more data
        </data>
        <data class="tts_data">...</data>
      </p>
  </section>
    </article>
    <footer>
    footer part of the page
    </footer>
  </body>
</html>

And the result here is: the result of the html file And the image appears.

所以我想知道这里出了什么问题。


考虑向我们展示最少但完整的示例来演示问题,否则很难判断。xsl:copy-of听起来对我来说是正确的方法,假设bodydataelement 将 HTML 元素作为子元素。至于查看转换结果,现在大多数浏览器都带有开发工具(或者您可以安装Firebug之类的开发工具),然后您可以按F12在浏览器中查看文档的DOM树来检查结果。至于复制到结果树的元素没有显示,通常可能是命名空间问题(即复制 HTML 无命名空间imgXHTML 结果文档)。因此,请向我们展示有关您尝试过的浏览器的更多详细信息,以及output您的 XSLT 具有的方法,您尝试创建哪个版本的 HTML 作为转换结果(即 HTML 4.01、XHTML 1.0、HTML5)。

[编辑] 在当前示例中,您使用名为的根元素html在结果树的 XHTML 1.0 命名空间中,Firefox/Mozilla 将结果呈现为 XML,其中命名空间很重要。当您复制img从输入 XML 中复制元素img将没有命名空间的元素放入 XHTML 文档中,因此由于缺乏正确的命名空间img浏览器无法识别的元素img作为 XHTML 的元素img元素。因此,您要么需要更改输入 XML,以对要复制的 (X)HTML 片段使用 XHTML 命名空间,要么,在我看来,这些天的重点是没有命名空间的 HTML 4 或 HTML5,您只需使用样式表结果树中的 HTML 版本,即您不要对文档的根元素使用命名空间,你设置<xsl:output method="html" version="4.01"/> or <xsl:output method="html" version="5.0"/>。这样问题就应该消失了。

作为替代方案,如果您确实希望结果是 XHTML 但又想复制 XMLimgXHTML 结果树中没有命名空间的元素,正确的方法是不使用copy-of,相反你会使用<xsl:apply-templates/>然后您需要编写模板将您需要的元素转换为 XHTML 命名空间,例如

<xsl:template match="img | p | center">
  <xsl:element name="{local-name()}" namespace="http://www.w3.org/1999/xhtml">
   <xsl:copy-of select="@*"/>
   <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

在我看来,所有浏览器供应商都专注于没有命名空间的 HTML5,但我建议不要转换为 XHTML,而是以 HTML 4.01 或没有命名空间的 HTML5 为目标,这样您可以在浏览器中与 XSLT 1.0 获得更好的跨浏览器互操作性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在浏览器中查看xsl输出? 的相关文章

随机推荐