按值访问XML节点

时间:2012-06-27 16:03:26

标签: javascript xml

是否可以使用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中有类似的内容吗?

2 个答案:

答案 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);