我收到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。
任何帮助将不胜感激。
答案 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]);