From: <aca...@us...> - 2007-05-27 15:26:02
|
Revision: 435 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=435&view=rev Author: acarboni Date: 2007-05-27 08:26:02 -0700 (Sun, 27 May 2007) Log Message: ----------- Added xpath support for [@attr='value'] expressions Modified Paths: -------------- trunk/web/scripts/core/kernel/xml.js Modified: trunk/web/scripts/core/kernel/xml.js =================================================================== --- trunk/web/scripts/core/kernel/xml.js 2007-05-26 17:23:32 UTC (rev 434) +++ trunk/web/scripts/core/kernel/xml.js 2007-05-27 15:26:02 UTC (rev 435) @@ -11,7 +11,7 @@ xml.escape = function(text) { - if (text == '') + if (text == '' || text == null) return text; return text .replace(/&/g, "&") @@ -139,13 +139,14 @@ for (var i=0; i<names.length; i++) { + var pathElem = xml.extractPathElem(names[i]); + var found = false; + node = node.firstChild; - var found = false; - while (node != null && !found) { - if (node.nodeType == Node.ELEMENT_NODE && node.nodeName == names[i]) + if (node.nodeType == Node.ELEMENT_NODE && xml.evalCond(node, pathElem)) found = true; else node = node.nextSibling; @@ -159,6 +160,61 @@ return xml.textContent(node); } +//------------------------------------------------------------------------------------- + +xml.extractPathElem = function(name) +{ + var res = {}; + + res.NAME = name; + res.CONDITION = ''; + + var startPos = name.indexOf('['); + var endPos = name.indexOf(']'); + + if (startPos != -1) + { + res.NAME = name.substring(0, startPos); + res.CONDITION = name.substring(startPos+1, endPos); + } + + return res; +} + +//------------------------------------------------------------------------------------- + +xml.evalCond = function(node, pathElem) +{ + var name = pathElem.NAME; + var cond = pathElem.CONDITION; + + if (node.nodeName != name) + return false; + + if (cond == '') + return true; + + //--- handle attribute condition + + if (cond.startsWith('@')) + { + var equPos = cond.indexOf('='); + var attr = cond.substring(1, equPos); + var value = cond.substring(equPos +1); + + return (node.getAttribute(attr) == xml.stripQuotes(value)); + } + + return false; +} + +//------------------------------------------------------------------------------------- + +xml.stripQuotes = function(text) +{ + return text.substring(1, text.length -1); +} + //===================================================================================== xml.textContent = function(node) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |