客户端xslt在Firefox中使用javascript

时间:2009-06-26 22:20:53

标签: javascript firefox xslt client-side

我正在使用客户端xslt将xml文件转换为xhtml。虽然有一些障碍,但我已经成功通过了除此之外的所有障碍。

问题在于,当我有一个像这样的简单xml文件时

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="./jsInFf.xsl"?>
<root>hello</root>

并使用像这样的简单xsl将其转换为xhtml

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="xml"
  version="1.0"
  encoding="ISO-8859-1"
  indent="yes"
  omit-xml-declaration="no"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title>a title</title>
        <script type="text/javascript">
          alert(document);
          alert(document.anchors);
    </script>
      </head>
      <body>
        <xsl:value-of select="." /> world
      </body>
    </html>
  </xsl:template>    
</xsl:stylesheet>

第一个警报将弹出为“[object XMLDocument]”,使用firefox而不是“[object]”,就像它对IE和safari一样。从我收集的这意味着firefox不会生成一个javascript html文档(或html dom,不知道措辞是什么)。 firefox中的第二个警报将是“未定义”,但在IE和safari中它是“[object]。

所以在firefox中没有document.forms或document.anchors等我知道一些javascript仍然可以工作,比如document.getElementById,但是我担心像ajax这样的更高级的东西如果是document.forms和像那样不存在。

有解决办法吗?在我目前的项目中,我正在重写一堆页面以使用xslt。有很多javascipt已经写好并且改变了所有使用有限的firefox javascript并不是真正的选择,如果它甚至是可能的。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

1)解决问题

解决您的问题就像在 xsl:output 元素上将 @method 属性的值从“xml”更改为“html”一样简单。

2)解释差异

HTML DOM扩展了核心XML DOM接口。因此,例如,XMLDocument中不存在集合“forms”,但是在HTMLDocument中

答案 1 :(得分:0)

我使用xml的原因是我想使用xhtml作为输出。由于我在客户端进行转换,因此我仅限于xslt 1.0,而xhtml不是一个选项。我在几个网站上看到输出xhtml的方法是选择xml并使用omit-xml-declaration。我想这就是导致firefox创建xml DOM的原因。

根据谢尔盖的建议,我改变了我的输出方法,一切似乎都有效。这就是现在的样子

  <xsl:output method="html"
  encoding="ISO-8859-1"
  indent="yes"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

我在IE中查看了doctype。它仍然说它是xhtml,即使该方法是HTML。我不知道为什么这么多网站建议使用xml输出方法破解......

感谢您解释与xml和html DOM的区别。出于好奇,有没有办法从xml dom手动创建一个html dom?