【发布时间】:2011-04-03 03:34:05
【问题描述】:
我正在尝试在使用 XLS 转换生成的 HTML 页面中包含 GoogleMap v3(v2 一切正常)。我的JS代码来自this page。
基本上,根据示例,当一切都是纯 HTML 时,地图可以正常工作,但是当我尝试将其包含在 XSL 样式表中时,Firefox (v3.6) 会抱怨并且不想加载任何内容:
错误:未捕获的异常:[异常...“不支持操作”代码:“9” nsresult:“0x80530009 (NS_ERROR_DOM_NOT_SUPPORTED_ERR)”位置:“http://maps.google.com/maps/api/js?sensor=false Line: 9”]
错误:google.maps.LatLng 不是构造函数 源文件:file:///home/kevin/google/data.xml 行:2
这是我正在使用的 XSL 代码的简化版本:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xsl:stylesheet >
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0px; padding: 0px }
#map_canvas { height: 100% }
</style>
<title>Google Maps JavaScript API v3 Example: Map Simple</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas"></div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
以及触发转换的简约 XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xsl:stylesheet>
<?xml-stylesheet type="text/xsl" href="Display.xsl"?>
<root />
根据我的谷歌调查,问题可能来自错误的 Doctype,但我真的不知道如何修复它,功能类似于
<xsl:output method="html"
indent="yes"
omit-xml-declaration="yes"
encoding="utf-8"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
不要改变任何东西。
编辑:对于 XML,我的实际 DOCTYPE 稍微复杂一些:
<!DOCTYPE xsl:stylesheet [<!ENTITY auml "ä" ><!ENTITY ouml "ö" ><!ENTITY uuml "ü" ><!ENTITY szlig "ß" ><!ENTITY Auml "Ä" ><!ENTITY Ouml "Ö" ><!ENTITY Uuml "Ü" ><!ENTITY euml "ë" ><!ENTITY ocirc "ô" ><!ENTITY nbsp " " ><!ENTITY Agrave "À" ><!ENTITY Egrave "È" ><!ENTITY Eacute "É" ><!ENTITY Ecirc "Ê" ><!ENTITY egrave "è" ><!ENTITY eacute "é" ><!ENTITY ecirc "ê" ><!ENTITY agrave "à" ><!ENTITY iuml "ï" ><!ENTITY ugrave "ù" ><!ENTITY ucirc "û" ><!ENTITY uuml "ü" ><!ENTITY ccedil "ç" ><!ENTITY AElig "Æ" ><!ENTITY aelig "Ŋ" ><!ENTITY OElig "Œ" ><!ENTITY oelig "œ" ><!ENTITY euro "€"><!ENTITY laquo "«" ><!ENTITY raquo "»" >]>
和 XSL:
<!DOCTYPE xsl:stylesheet [
<!ENTITY % xhtml-lat1 SYSTEM
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
<!ENTITY % xhtml-special SYSTEM
"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
<!ENTITY % xhtml-symbol SYSTEM
"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
%xhtml-lat1;
%xhtml-special;
%xhtml-symbol;
]>
正确处理我所有的口音和特殊字符,所以如果可能的话,我想避免摆脱它
编辑 2:问题实际上与我尝试通过 Mapstraction API 加载 OpenStreetMap 完全相同,document.write 是不允许的。
当我使用回调函数时,Google Map v2 可以正常工作的另一件事:
http://maps.google.com/maps?file=api&v=2.x&key={myKey}&c&async=2&callback={myInitFunct}
有什么线索可以说明问题吗?
【问题讨论】:
-
(@Dimitre,我的 xslt 标签出了什么问题?)
-
这不是 XSLT 问题。这个问题提出的问题不是关于“如何使用 XSLT 解决这个特定问题”,而是关于如何使特定环境/xslt 处理器执行的问题。总结一下——这个问题是 FF 特有的,所以它属于 xsltprocessor 标签。
标签: google-maps google-maps-api-3 doctype xslt