Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLSerializer区分大小写_Javascript_Dom_Xml Serialization_Kml_Google Earth - Fatal编程技术网

Javascript XMLSerializer区分大小写

Javascript XMLSerializer区分大小写,javascript,dom,xml-serialization,kml,google-earth,Javascript,Dom,Xml Serialization,Kml,Google Earth,我正在用Javascript生成一个KML文档,并试图使用它来生成XML文件,但它生成了所有小写标记,尽管我在DOM中以大写字母创建了标记 是DOM破坏了大小写还是XMLSerializer?有没有办法绕过它或者我错过了什么?我在Chrome和Firefox上都试过了 KML文档将被导入Google Earth,它似乎不接受小写标记。添加大写字母的元素并不重要,DOM总是以小写字母管理它们。只要用firebug检查一下,你就看不到大写的标签了 如果您的doctype设置为XHTML,它甚至会违反

我正在用Javascript生成一个KML文档,并试图使用它来生成XML文件,但它生成了所有小写标记,尽管我在DOM中以大写字母创建了标记

是DOM破坏了大小写还是XMLSerializer?有没有办法绕过它或者我错过了什么?我在Chrome和Firefox上都试过了


KML文档将被导入Google Earth,它似乎不接受小写标记。

添加大写字母的元素并不重要,DOM总是以小写字母管理它们。只要用firebug检查一下,你就看不到大写的标签了

如果您的doctype设置为XHTML,它甚至会违反标准

在XHTML中,属性和元素必须全部小写

更新:仅检查以下内容:

var test = document.createElement("DIV");
// test.outerHTML returns "<div></div>"
var test=document.createElement(“DIV”);
//test.outerHTML返回“”

因此,当您创建元素时,它已经被解析并转换为小写。

以下内容适用于我(保留大小写)在XHTML页面中的FF 5 beta版:

   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>test</title>
        <script type="text/javascript">
            function test() {
                var kml = document.getElementsByTagName("kml").item(0);
                window.alert (new XMLSerializer().serializeToString(kml));
            }
        </script>
    </head>
    <body onload="test()">
<kml id="kml" xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>KML Samples</name>
    <open>1</open>
    <description>samples</description>
    <Style id="downArrowIcon">
      <IconStyle>
        <Icon>
          <href>http://maps.google.com/mapfiles/kml/pal4/icon28.png</href>
        </Icon>
      </IconStyle>
    </Style>
  </Document>
</kml>
    </body>
</html>

测试
功能测试(){
var kml=document.getElementsByTagName(“kml”).item(0);
window.alert(新的XMLSerializer().serializeToString(kml));
}
KML样本
1.
样品
http://maps.google.com/mapfiles/kml/pal4/icon28.png

基于FF4中的测试,以下各项将起作用:

  • 使用
    document.createElements(“http://www.opengis.net/kml/2.2“,elementName)
    而不是
    document.createElement(elementName)

  • 使用
    elt.appendChild(document.createTextNode(text))
    而不是
    elt.innerHTML=text


  • Case-mangling听起来像是在以某种方式将文档视为HTML而不是XML。您有代码示例吗?@MatthewWilson创建KML结构然后序列化它的代码部分。它是在HTML5页面中执行的,不过这是一个HTML的东西。XML通常是区分大小写的,API应该是保留大小写的。我不知何故假设他在使用DOM的html页面中工作。当然,XML不会与Google一起工作,因为XML区分大小写。好的,所以KML嵌入在HTML中。我认为只要页面是XHTML并且名称空间被适当地声明就可以了。在您的测试中,“DIV”被转换为“DIV”,因为它是一个HTML元素,我希望序列化程序知道不要使用非HTML元素?正如您在本文中看到的,我正在处理一个单独的文档片段。干得好。比我想象的要简单。不确定这有多大帮助,因为您已经有了一个有效的KML结构,可以抓取并序列化。我正在用javascript从头开始构建我的KML文档。好的,我在发布的时候不知道。这很有效。谢谢有点恼人,你必须对每个元素都这样做。应该是使用片段命名空间的文档片段对象上的createElement函数。