我有一个像这样的xml文件
<root>
<section>
<state>state one</state>
<ct>
<city>first city</city>
<city>second city</city>
<city>third city</city>
</ct>
</section>
</root>
我希望在jquery中访问城市名称...我已经尝试了这样的事情:
var x;
var ct = "";
for(i=1 ; 1=3 ; i++){
x = xmlDoc.getElementsByTagName('ct')[0].childNodes[i].childNodes[0].nodeValue;
ct += x;
}
$('div').html(ct);
但是,我只有第一个城市......我无法进入第二和第三个城市...... 像这样的代码:
x = xmlDoc.getElementsByTagName('ct')[0].childNodes[2].childNodes[0].nodeValue;
什么也不给我!!!!!
答案 0 :(得分:2)
由于您提到了jQuery,您可以使用$.parseXML
将XML解析为XML文档$()
以获取该文档的jQuery包装器find
以查找{{1}节点,然后用它们做你喜欢的事情(例如使用map
来获取它们的文本):
city
var doc = $.parseXML(
'<root>' +
'<section>' +
'<state>state one</state>' +
'<ct>' +
'<city>first city</city>' +
'<city>second city</city>' +
'<city>third city</city>' +
'</ct>' +
'</section>' +
'</root>'
);
var cities = $(doc).find("city");
var cityNames = cities.map(function() { return $(this).text(); }).get();
console.log(cityNames);
(<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
之后map
将map
返回的jQuery包装器转换为普通数组。)
我们在find
中使用的选择器可能更具体。例如,您专门在city
容器中查找了ct
个元素;如果这很重要,我们的find
选择器应为ct > city
,而不仅仅是city
:
var doc = $.parseXML(
'<root>' +
'<section>' +
'<state>state one</state>' +
'<ct>' +
'<city>first city</city>' +
'<city>second city</city>' +
'<city>third city</city>' +
'</ct>' +
'</section>' +
'</root>'
);
var cities = $(doc).find("ct > city");
var cityNames = cities.map(function() { return $(this).text(); }).get();
console.log(cityNames);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:0)
您在childNodes
元素中看到了多少<ct>
?最有可能3.实际上,那里有7 childNodes
。其中三个是您的<city>
元素,另外四个是由xml标记之间的空格(空格,换行符,回车符)组成的文本节点。
您应该使用返回元素数组而不是节点数组的函数(例如getElementsByTagName)。
var cities = xmlDoc.getElementsByTagName('ct')[0].getElementsByTagName('city');