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";}
    };
};
