使用JavaScript查找具有给定属性值的xml元素的值只有
问题描述:
我有一个xml字符串,我需要从仅使用JavaScript中提取值。这里的XML字符串的例子:使用JavaScript查找具有给定属性值的xml元素的值只有
<RequestVars>
<BuyerCookie>O7CPHFP7AOY</BuyerCookie>
<Extrinsic name="CostCenter">670</Extrinsic>
<Extrinsic name="UniqueName">catalog_tester</Extrinsic>
<Extrinsic name="UserEmail">[email protected]</Extrinsic>
</RequestVars>
,我需要从中获得的电子邮件地址(即[email protected])。我有办法拉值对于给定的独特元素,如使用此功能让O7CPHFP7AOY为BuyerCookie:
function elementValue(xml, elem) {
var begidx;
var endidx;
var retStr;
begidx = xml.indexOf(elem);
if (begidx > 0) {
endidx = xml.indexOf('</', begidx);
if (endidx > 0)
retStr = xml.slice(begidx + elem.length,
endidx);
return retStr;
}
return null;
}
但现在,我需要一种方法来查找值的“外在”元素与属性“name”的值“UserEmail”。我已经看到了几种在JQuery中完成此操作的方法,但在JavaScript中没有。不幸的是,为了我的目的,我只能使用JavaScript。有任何想法吗?
答
我想出了一个解决方案。这有点乱,但它确实很棘手。我提供了xml的字符串表示形式,我正在查找的元素标记的名称,属性的名称以及我正在寻找元素值的属性值。
function elementValueByAttribute(xml, elem, attrName, attrValue) {
var startingAt = 1;
var begidx;
var mid1idx;
var mid2idx;
var endidx;
var aName;
var retStr;
var keepGoingFlag = 1;
var count = 0;
while (keepGoingFlag > 0) {
count++;
begidx = xml.indexOf(elem, startingAt);
if (begidx > 0) {
mid1idx = xml.indexOf(attrName, begidx);
if (mid1idx > 0) {
mid2idx = xml.indexOf(">", mid1idx);
if (mid2idx > 0) {
aName = xml.slice(mid1idx + attrName.length + 2, mid2idx - 1);
if (aName == attrValue) {
endidx = xml.indexOf('</', begidx);
if (endidx > 0)
{
retStr = xml.slice(mid2idx + 1, endidx);
}
return retStr;
}
}
}
}
if (startingAt == mid2idx) {
keepGoingFlag = 0;
} else {
startingAt = mid2idx;
}
}
return null;
}
nope,这似乎没有帮助 – Rob
不要将XML解析为字符串。永远。 – 2013-10-02 06:08:12