Google maps XSLT、Doctype和Google Map v3不工作

Google maps XSLT、Doctype和Google Map v3不工作,google-maps,google-maps-api-3,doctype,xslt,Google Maps,Google Maps Api 3,Doctype,Xslt,我正试图在使用XLS转换生成的HTML页面中包含GoogleMapV3(v2一切正常)。我的JS代码来自 基本上,当所有内容都是纯HTML时,映射可以正常工作,如示例所示,但是当我尝试将其包含在XSL样式表中时,Firefox(v3.6)会抱怨,不想加载任何内容: 错误:未捕获异常:[异常…”操作不受支持“代码:”9“nsresult:“0x80530009(NS\u错误\u DOM\u不受支持\u错误)”位置:“行:9”] 错误:google.maps.LatLng不是构造函数 源文件:fil

我正试图在使用XLS转换生成的HTML页面中包含GoogleMapV3(v2一切正常)。我的JS代码来自

基本上,当所有内容都是纯HTML时,映射可以正常工作,如示例所示,但是当我尝试将其包含在XSL样式表中时,Firefox(v3.6)会抱怨,不想加载任何内容:

错误:未捕获异常:[异常…”操作不受支持“代码:”9“nsresult:“0x80530009(NS\u错误\u DOM\u不受支持\u错误)”位置:“行: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>

html{高度:100%}
正文{高度:100%;边距:0px;填充:0px}
#地图画布{高度:100%}
谷歌地图JavaScript API v3示例:简单地图
函数初始化(){
var mylatng=new google.maps.LatLng(-34.397150.644);
变量myOptions={
缩放:8,
中心:myLatlng,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
}
以及触发转换的最简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   "&#228;" ><!ENTITY ouml   "&#246;" ><!ENTITY uuml   "&#252;" ><!ENTITY szlig  "&#223;" ><!ENTITY Auml   "&#196;" ><!ENTITY Ouml   "&#214;" ><!ENTITY Uuml   "&#220;" ><!ENTITY euml   "&#235;" ><!ENTITY ocirc  "&#244;" ><!ENTITY nbsp   "&#160;" ><!ENTITY Agrave "&#192;" ><!ENTITY Egrave "&#200;" ><!ENTITY Eacute "&#201;" ><!ENTITY Ecirc  "&#202;" ><!ENTITY egrave "&#232;" ><!ENTITY eacute "&#233;" ><!ENTITY ecirc  "&#234;" ><!ENTITY agrave "&#224;" ><!ENTITY iuml   "&#239;" ><!ENTITY ugrave "&#249;" ><!ENTITY ucirc  "&#251;" ><!ENTITY uuml   "&#252;" ><!ENTITY ccedil "&#231;" ><!ENTITY AElig  "&#198;" ><!ENTITY aelig  "&#330;" ><!ENTITY OElig  "&#338;" ><!ENTITY oelig  "&#339;" ><!ENTITY euro   "&#8364;"><!ENTITY laquo  "&#171;" ><!ENTITY raquo  "&#187;" >]>
]>
和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;
  ]>

%xhtml-lat1;
%xhtml专用;
%xhtml符号;
]>
为了正确处理我所有的口音和特殊字符,如果可能的话,我想避免去掉它

编辑2:问题实际上与我尝试通过Mapstraction API加载OpenStreetMap时完全相同,
文档。不允许写入

另一件事是,当我使用回调函数时,Google Map v2工作正常:

http://maps.google.com/maps?file=api&v=2.x&key={myKey}&c&async=2&callback={myInitFunct}


有什么错误的线索吗?

声明样式表DOCTYPE的正确方法:

<!DOCTYPE xsl:stylesheet [ 
  <!ENTITY % HTMLlat1 PUBLIC
       "-//W3C//ENTITIES Latin 1 for XHTML//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
  %HTMLlat1;
  <!ENTITY % HTMLspecial PUBLIC
        "-//W3C//ENTITIES Special for XHTML//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
  %HTMLspecial;
  <!ENTITY % HTMLsymbol PUBLIC
        "-//W3C//ENTITIES Symbols for XHTML//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
  %HTMLsymbol;
]>

%HTMLspecial;
%HTMLsymbol;
]>

解决方案是使用GoogleMap API的
回调
参数:

{myInitFunction}

事实上,正如我们在生成的JS脚本中看到的,它们插入代码的方式不同:

带有回调:

function getScript(src) {
    var s = document.createElement('script');

    s.src = src;
    document.body.appendChild(s);
  }
function getScript(src) {
document.write('<' + 'script src="' + src + '"' +
               ' type="text/javascript"><' + '/script>');
}
无回调:

function getScript(src) {
    var s = document.createElement('script');

    s.src = src;
    document.body.appendChild(s);
  }
function getScript(src) {
document.write('<' + 'script src="' + src + '"' +
               ' type="text/javascript"><' + '/script>');
}
函数getScript(src){ 文件。写(“”); }
其中
文档.写入
可能被禁止

(然而,我真的不明白为什么他们对同一个动作使用两个不同的代码,也许只是为了解决我们的问题:)


感谢您的教程

,这里的问题是FF中的XSLT输出行为与静态HTML不同

在静态HTML页面中,同步加载GMap脚本,以便在触发body.onload事件时,脚本已经加载

在XSLT输出中,激发body.onload时脚本仍在加载

我以这种方式解决了这个问题(下面是XSLT输出):


函数onLoadMaps()
{
///在这里初始化地图
}
var zOnLoadCode=false;
var zOnLoadBody=false;
函数onLoadCode(){zOnLoadCode=true;}
函数onLoadBody(){zOnLoadBody=true;}
var onLoadTimer=window.setInterval(函数(){
if(zOnLoadCode和zOnLoadBody){
clearInterval(onLoadTimer);
onLoadMaps();
}
},100,“javascript”);


也就是说,我使用GMap回调URL参数在脚本加载时发出信号,使用body.onload事件在页面准备就绪时发出信号,然后我等待直到两者都被触发。

(@Dimitre,我的xslt标记怎么了?)这不是xslt问题。这个问题提出的问题不是“如何使用XSLT解决这个特定问题”,而是如何使特定的环境/XSLT处理器执行。总而言之,这个问题是FF特有的,所以它属于xsltprocessor标记。@Alejandro,1)我的代码不工作,2)你的代码为你工作吗?因为我在尝试您的示例时遇到了相同的错误(对于XSLT v2,我不知道我从哪里得到了这个数字,我将把它改回v1,它所属的位置!),感谢您的帮助,但是在我的例子中,回调足以绕过这个问题,不需要检查是否已经加载了所有其他内容!