if(window.XMLDocument && document.implementation.hasFeature("XPath","3.0") && !XMLDocument.prototype.selectNodes)
{	XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
	{
	    if(!xNode) xNode = this;
	    var oNSResolver = this.createNSResolver(this.documentElement);
	    var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	    var aResult=[];
	    for(var i=0;i<aItems.snapshotLength;i++) aResult[i] = aItems.snapshotItem(i);
	    return aResult;
	 };

	 XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
	 {	 	if(!xNode) xNode = this;
	 	var oNSResolver = this.createNSResolver(this.documentElement);
	 	var xItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	 	if(xItems.snapshotLength>0) return xItems.snapshotItem(0);
 		return null;
	 };

	 Element.prototype.selectNodes = function(cXPathString)
	 {	 	if(this.ownerDocument.selectNodes)
	 		return this.ownerDocument.selectNodes(cXPathString, this)
	 	else
	 		throw"For XML Elements Only";
	 };

	 Element.prototype.selectSingleNode = function(cXPathString)
	 {	 	if(this.ownerDocument.selectSingleNode)
	 		return this.ownerDocument.selectSingleNode(cXPathString,this)
	 	else
	 		throw "For XML Elements Only";
	 }

	 function xText(xNode)
	 {	 	return xNode.text || xNode.textContent;	 }
};

