使用纯javascript从xml中提取值

时间:2014-12-12 07:09:02

标签: javascript xml

我收到xml作为网络回复。

<s:Envelope xmlns:s="http://schemas.example.org/soap/envelope/">
<s:Header/>
    <s:Body>
        <ProductIdResponse xmlns="http://example.org/">
            <Product>123</Product>
        <ProductIdResponse>
    </s:Body>
</s:Envelope>

我希望使用纯javascript从xml中提取值并将其存储在变量中。 stackoverflow中有很多例子,但都使用DOM元素和jquery。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

看看这里:XML Parser

将xml加载到xml文档中,然后以与页面文档相同的方式访问元素:

    //initialize your xml for testing purposes
    txt='<s:Envelope xmlns:s="http://schemas.example.org/soap/envelope/">';
    txt=txt+'<s:Header/>';
    txt=txt+'<s:Body>';
    txt=txt+'<ProductIdResponse xmlns="http://example.org/">';
    txt=txt+' <Product>123</Product>';
    txt=txt+'<ProductIdResponse>';
    txt=txt+'</s:Body>';
    txt=txt+'</s:Envelope>';
    
    if (window.DOMParser) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(txt, "text/xml");
    } else // Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(txt);
    }
    var myProduct = xmlDoc.getElementsByTagName("Product")[0].innerHTML;
    alert(myProduct);

如果您不想将xml解析为DOM,您可以使用RegEx匹配来检索数据

检查Here是否有一个好的RegEx测试人员,你可以练习正则表达式。

//initialize your xml for testing purposes
txt = '<s:Envelope xmlns:s="http://schemas.example.org/soap/envelope/">';
txt = txt + '<s:Header/>';
txt = txt + '<s:Body>';
txt = txt + '<ProductIdResponse xmlns="http://example.org/">';
txt = txt + ' <Product>123</Product>';
txt = txt + ' <Product>Product 2</Product>';
txt = txt + '<ProductIdResponse>';
txt = txt + '</s:Body>';
txt = txt + '</s:Envelope>';

var myProducts = txt.match(/<Product>(.*?)<\/Product>/g);
myProducts.forEach(function(val, id) {
  myProducts[id] = myProducts[id].replace(/(<([^>]+)>)/ig, "");
});
console.log(myProducts);
alert("2nd product is: " + myProducts[1]);