是否可以使用JavaScript使用属性值(例如id
)访问XML部分/节点?
例如:
<people>
<person id='1'>
<name>Tom</name>
<age>30</age>
</person>
<person id='2'>
<name>Ian</name>
<age>22</age>
</person>
<person id='3'>
<name>Ben</name>
<age>45</age>
</person>
</people>
我希望能够选择具有给定ID的人。例如,找到ID 2将返回Ian。
在ActionScript中可以这样做:
xml.people.person.(@id == 2).name
JS中有类似的内容吗?
答案 0 :(得分:1)
假设您有XMLDocument
,唯一的跨浏览器方式是遍历节点:
var people = doc.getElementsByTagName('person');
for(var i = 0; i < people.length; i++) {
if(people[i].getAttribute('id') === '2') {
// Found it!
}
}
但是,如果你需要做非常复杂的表达式,那么使用XPath可能是值得的,即使它需要一些跨浏览器检查。
以下是标准方式:
document.evaluate('//person[@id='2']/text()[0]', doc.documentElement, null, XPathResult.STRING_TYPE, null).stringValue;
答案 1 :(得分:1)
var xml_text="<people><person id='1'><name>Tom</name><age>30</age></person><person id='2'><name>Ian</name><age>22</age></person><person id='3'><name>Ben</name><age>45</age></person></people>";
var xmlParser = new DOMParser().parseFromString(xml_text, "text/xml").documentElement;
var person2Name = xmlParser.querySelector("people person[id='2'] name").textContent ;
querySelector将一个字符串作为输入,该字符串充当节点上的css选择器。
textContent获取节点的文本。
IE8不支持DOMParser:但您可以使用以下解决方法
xmlParser =new ActiveXObject("Microsoft.XMLDOM");
xmlParser.async=false;
xmlParser.loadXML(xml_text);