XML存储为变量。如何通过XPATH获取变量中的元素?

时间:2014-03-27 20:28:27

标签: xml variables xpath

问题

您好,我正在尝试使用XPATH获取元素。我已经使用变量XML中的xmlHTTP.open命令存储了我获取的XML。但是,我不知道如何使用XPATH来获取存储在变量中的XML中的元素。

有什么建议吗?

以下是代码:

var XML;
var Day;

function httpGet(location,week,day){
    var xmlHttp = null;
    Day = day;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.bsd.ufl.edu%2Fdining%2FMenus%2FdinHallMenu.aspx%3Flocid%3D"+location+"%26ms%3D"+week+"%26%22&format=xml&diagnostics=true&callback=", false );
    xmlHttp.send( null );
    XML = xmlHttp.responseText;
    console.log(XML)
    getResults();
}

function getResults(){
    var getElementByXpath = function(path) {
    return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
};

1 个答案:

答案 0 :(得分:0)

以下函数,用于计算xpath并根据xpath返回一个或多个节点。

function evaluateXMLPath(expr,node){
    var retVal=new Array();
    //IE
    if(window.ActiveXObject || xhttp.responseType == "msxml-document"){
        try{
            retVal=node.selectNodes(expr);
        }catch(e){
            alert("IE:xpath not supported");
        }
    }
    //chrome, firefox,opera,etc.
    else if(document.implementation && document.implementation.createDocument){

        try{
            var nodes=node.evaluate(expr, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);         
            for(var i=0;i<nodes.snapshotLength;i++){
                retVal[retVal.length]=nodes.snapshotItem(i);
            }
        }catch(ex){
            alert("Other:xpath not supported");
        }
    }
    return retVal;
}

您使用上述功能,如下所示。

var capNode=evaluateXMLPath("//root",xml);
var textStr = capNode[0].getElementsByTagName("text")[0].childNodes[0].nodeValue;

这可能会有所帮助。感谢