我正在使用客户端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并不是真正的选择,如果它甚至是可能的。
非常感谢您的帮助。
答案 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?