我正在尝试使用Javascript解析XML片段并将结果放入数组中。我生活在PHP世界中,并且由于要求,这必须是Javascript,所以在解决方案上有点磕磕绊绊。我需要'variables'元素中所有'variable'属性的'name'和'value'值。使用下面的myVars变量,它实际上有更多的标记,它会返回一个像这样的关联数组:
array={fname:'Gene',lname:'Simmons'};
这是标记。
var myVars = '<variables><variable name="fname" type="string" value="Gene" resume="true"/><variable name="lname" type="string" value="Simmons" resume="true"/><variable name="LastSlideViewed" type="string" value="_player.3093j3" resume="true"/></variables><actiongroups><actiongroup id="ActGrpOnSubmitButtonClick"><actions><trigger_submit_slide/></actions></actiongroup><actiongroups>';
在一个完美的世界中,我能够排除某些具有某个“名称”值的“变量”元素。例如,排除其“名称”值在“排除”数组中的所有元素,例如:
var exclude = ["LastSlideViewed", "FirstSlideViewed"];
所以上面的数组只有fname和lname键的原因是因为我们只从'variables'元素中获取'variable'元素,并排除那些在exclude数组中找到'name'值的元素,并且我们也忽略了'variables'元素之外的任何东西,比如'actiongroups'元素。任何帮助将不胜感激。
我可能会越来越近了:
parser = new DOMParser();
xmlDoc = parser.parseFromString(myVars,"text/xml");
x = xmlDoc.getElementsByTagName('variable');
for (i = 0; i < x.length; i++) {
myAssociativeArr.push({name: x[i].getAttribute('name'), value: x[i].getAttribute('value')});
}
答案 0 :(得分:0)
是的,你很亲密。 JavaScript不使用术语“关联数组”,但JavaScript中的对象与您称之为关联数组的对象非常相似。
我已修改您的代码以使用对象,并添加了if
语句以省略排除的项目。这有效:
var myVars = '<variables><variable name="fname" type="string" value="Gene" resume="true"/><variable name="lname" type="string" value="Simmons" resume="true"/><variable name="LastSlideViewed" type="string" value="_player.3093j3" resume="true"/></variables><actiongroups><actiongroup id="ActGrpOnSubmitButtonClick"><actions><trigger_submit_slide/></actions></actiongroup><actiongroups>';
var exclude = ["LastSlideViewed", "FirstSlideViewed"];
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(myVars, "text/xml");
var x = xmlDoc.getElementsByTagName('variable');
var myAssociativeArr = {};
for (var i = 0; i < x.length; i++) {
var name = x[i].getAttribute('name');
if (exclude.indexOf(name) === -1) {
myAssociativeArr[name] = x[i].getAttribute('value');
}
}
console.log(myAssociativeArr);
如果您确实想要使用类似于在代码中构建的对象数组,那么您可以将该部分恢复为您拥有它的方式:
var myVars = '<variables><variable name="fname" type="string" value="Gene" resume="true"/><variable name="lname" type="string" value="Simmons" resume="true"/><variable name="LastSlideViewed" type="string" value="_player.3093j3" resume="true"/></variables><actiongroups><actiongroup id="ActGrpOnSubmitButtonClick"><actions><trigger_submit_slide/></actions></actiongroup><actiongroups>';
var exclude = ["LastSlideViewed", "FirstSlideViewed"];
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(myVars, "text/xml");
var x = xmlDoc.getElementsByTagName('variable');
var myAssociativeArr = [];
for (var i = 0; i < x.length; i++) {
var name = x[i].getAttribute('name');
if (exclude.indexOf(name) === -1) {
myAssociativeArr.push({name: name, value: x[i].getAttribute('value')});
}
}
console.log(myAssociativeArr);