[OpenLayers-Commits] r4798 - in branches/openlayers/2.5: lib/OpenLayers/Format tests/Format
commits at openlayers.org
commits at openlayers.org
Wed Oct 3 17:18:40 EDT 2007
Author: crschmidt
Date: 2007-10-03 17:18:39 -0400 (Wed, 03 Oct 2007)
New Revision: 4798
Modified:
branches/openlayers/2.5/lib/OpenLayers/Format/KML.js
branches/openlayers/2.5/tests/Format/test_KML.html
Log:
Pullup for KML needs to automatically determine the namespace of the document
it is handling. (Closes #1044)
Modified: branches/openlayers/2.5/lib/OpenLayers/Format/KML.js
===================================================================
--- branches/openlayers/2.5/lib/OpenLayers/Format/KML.js 2007-10-03 21:15:09 UTC (rev 4797)
+++ branches/openlayers/2.5/lib/OpenLayers/Format/KML.js 2007-10-03 21:18:39 UTC (rev 4798)
@@ -48,6 +48,13 @@
* {Boolean} Extract attributes from KML. Default is true.
*/
extractAttributes: true,
+
+ /**
+ * Property: internalns
+ * {String} KML Namespace to use -- defaults to the namespace of the
+ * Placemark node being parsed, but falls back to kmlns.
+ */
+ internalns: null,
/**
* Constructor: OpenLayers.Format.KML
@@ -83,7 +90,7 @@
data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
}
var featureNodes = this.getElementsByTagNameNS(data,
- this.kmlns,
+ '*',
"Placemark");
var numFeatures = featureNodes.length;
var features = new Array(numFeatures);
@@ -116,7 +123,10 @@
var type, nodeList, geometry, parser;
for(var i=0; i<order.length; ++i) {
type = order[i];
- nodeList = this.getElementsByTagNameNS(node, this.kmlns, type);
+ this.internalns = node.namespaceURI ?
+ node.namespaceURI : this.kmlns;
+ nodeList = this.getElementsByTagNameNS(node,
+ this.internalns, type);
if(nodeList.length > 0) {
// only deal with first geometry of this type
var parser = this.parseGeometry[type.toLowerCase()];
@@ -165,7 +175,7 @@
* {<OpenLayers.Geometry.Point>} A point geometry.
*/
point: function(node) {
- var nodeList = this.getElementsByTagNameNS(node, this.kmlns,
+ var nodeList = this.getElementsByTagNameNS(node, this.internalns,
"coordinates");
var coords = [];
if(nodeList.length > 0) {
@@ -200,7 +210,7 @@
* {<OpenLayers.Geometry.LineString>} A linestring geometry.
*/
linestring: function(node, ring) {
- var nodeList = this.getElementsByTagNameNS(node, this.kmlns,
+ var nodeList = this.getElementsByTagNameNS(node, this.internalns,
"coordinates");
var line = null;
if(nodeList.length > 0) {
@@ -254,7 +264,7 @@
* {<OpenLayers.Geometry.Polygon>} A polygon geometry.
*/
polygon: function(node) {
- var nodeList = this.getElementsByTagNameNS(node, this.kmlns,
+ var nodeList = this.getElementsByTagNameNS(node, this.internalns,
"LinearRing");
var numRings = nodeList.length;
var components = new Array(numRings);
Modified: branches/openlayers/2.5/tests/Format/test_KML.html
===================================================================
--- branches/openlayers/2.5/tests/Format/test_KML.html 2007-10-03 21:15:09 UTC (rev 4797)
+++ branches/openlayers/2.5/tests/Format/test_KML.html 2007-10-03 21:18:39 UTC (rev 4798)
@@ -28,7 +28,7 @@
"read geometry collection");
}
- function test_Format_KML_readCdataAttributes(t) {
+ function test_Format_KML_readCdataAttributes_20(t) {
t.plan(2);
var cdata = '<kml xmlns="http://earth.google.com/kml/2.0"><Document><Placemark><name><![CDATA[Pezinok]]></name><description><![CDATA[Full of text.]]></description><styleUrl>#rel1.0</styleUrl><Point> <coordinates>17.266666, 48.283333</coordinates></Point></Placemark></Document></kml>';
var features = (new OpenLayers.Format.KML()).read(cdata);
@@ -37,6 +37,15 @@
}
+ function test_Format_KML_readCdataAttributes_21(t) {
+ t.plan(2);
+ var cdata = '<kml xmlns="http://earth.google.com/kml/2.1"><Document><Placemark><name><![CDATA[Pezinok]]></name><description><![CDATA[Full of text.]]></description><styleUrl>#rel1.0</styleUrl><Point> <coordinates>17.266666, 48.283333</coordinates></Point></Placemark></Document></kml>';
+ var features = (new OpenLayers.Format.KML()).read(cdata);
+ t.eq(features[0].attributes.description, "Full of text.", "Description attribute in cdata read correctly");
+ t.eq(features[0].attributes.name, "Pezinok", "title attribute in cdata read correctly");
+
+ }
+
function test_Format_KML_write(t) {
// make sure id, name, and description are preserved
t.plan(1);
More information about the Commits
mailing list