如何查看浏览器XSL输出?(How to view xsl output in browsers?)

2019-06-27 01:21发布

大家!

我建立基于某些XML数据文件的网站,所以我选择用XSLT工作的样式表绑定的浏览器。

它的工作原理相当不错,在第一,但最近,作为模板变得更加复杂,奇怪的事情发生。

我用的是“复制的”元素将数据复制到样式表。 下面的代码:

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

所以,基本上,我复制“bodydata”节点的所有子元素为<DIV />。

但是,这是行不通的。 例如,我有在bodydata一个<img />元素,如果我访问的XML文件中的浏览器,图像不会出现。 在另一方面,如果我用手工复制“bodydata”元素融入到该分区,使的.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>

其结果是这样的: img元素就会消失。

而接下来,我复制了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>

这里的结果是: 并显示图像。

所以我不知道什么是错在这里。

Answer 1:

考虑到我们展示最小但完整样本,以说明问题,否则就很难说。 xsl:copy-of是一个正确的做法对我的声音,假设bodydata元素具有HTML元素的子元素。 至于看转型的结果,这些天大多数浏览器都配有开发工具(或者你可以安装一个类似Firebug),那么你可以打F12查看文档的DOM树在浏览器中检查结果。 至于复制到结果树没有显示出来的元素,一般它可以是一个命名空间的问题(即,复制HTML命名空间少img到XHTML结果文档)。 所以,我们展示了更多的细节哪个浏览器(S),你已经尽力了,它output的XSLT有方法,它的HTML版本,你要创建作为转换结果(即HTML 4.01,XHTML 1.0,HTML5)。

[编辑]用,你用一个名为根元素当前的样本html的XHTML 1.0命名空间的结果树,火狐/ Mozilla浏览器的渲染结果作为XML命名空间在那里不管。 当复制img输入XML元素,您复制img没有命名空间元素为XHTML文档,因此由于缺乏右侧命名空间的img元素的浏览器不能识别img元素作为XHTML img元素。 所以,你要么需要改变你的输入XML使用XHTML命名空间的(X)HTML要复制,或者,在我看来这些天的重点是对HTML 4或HTML5没有命名空间,只需使用片段在样式表中,即不使用命名空间的文档的根元素的结果树HTML版本,可以设置<xsl:output method="html" version="4.01"/><xsl:output method="html" version="5.0"/> 这样,问题就会消失。

作为替代方案,如果你真的想要得到的结果是XHTML,但您想将XML复制img元素中没有命名空间到XHTML结果树,正确的方法是不使用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更好的跨浏览器的互操作性。



Answer 2:

我得到充分的通缉的结果,当我显示与IE9的XML文件

更新

如图所示马丁Honnen,失踪xsl:output语句使输出方法xml使用(默认值),这是什么原因造成的浏览器不以治疗输出HTML。

添加<xsl:output method="html"/>解决了问题。



文章来源: How to view xsl output in browsers?
标签: xml xslt