访问xml文件节点?

时间:2017-02-27 12:50:47

标签: jquery xml

我有一个像这样的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;

什么也不给我!!!!!

2 个答案:

答案 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>之后mapmap返回的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');