0

是否可以使用 JavaScript 使用属性值(例如)访问 XML 部分/节点id

例如:

<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中有类似的东西吗?

4

2 回答 2

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;
于 2012-06-27T16:11:07.253 回答
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); 
于 2012-06-27T16:11:11.553 回答