未定义尝试解析此xml文件

时间:2017-06-05 19:40:26

标签: javascript jquery xml

所以我肯定是初学者,当涉及到javascript和jquery时,我正在尝试解析这个xml(这是来自API调用的响应)。我遇到的问题是我不知道如何解析xml文件以获取一些值。

<group_user>
<id type="integer">2671029</id>
<created_at type="datetime">2013-01-20T21:42:01+00:00</created_at>
<comments_count type="integer">0</comments_count>
<moderator_at type="datetime" nil="true"/>
<user>
<id type="integer">5586131</id>
<first_name>Melora</first_name>
</user>
</group_user>
<group_user>
<id type="integer">2026289</id>
<created_at type="datetime">2012-06-08T04:22:38+00:00</created_at>
<comments_count type="integer">38</comments_count>
<moderator_at type="datetime" nil="true"/>
<user>
<id type="integer">6082517</id>
<first_name>Cindy</first_name>
</user>

对于所有用户(不是group_users)我想存储/ consolelog所有id和所有名字。

现在我正在做:

   var name = $(xml).find("first_name").text();
   console.log(name); 

  var id = $(xml).find("id").text();
  console.log(id); 

但这只是给了我一个连接在一起的所有id和名字的巨大列表。我希望能够将它们视为独立的元素。

2 个答案:

答案 0 :(得分:0)

    
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xhr.responseText, 'text/xml');
    var name = xmlDoc.getElementsByTagName('first_name')[0].childNodes[0].nodeValue;
    var id = xmlDoc.getElementsByTagName('id')[0].childNodes[0].nodeValue;

    console.log(id, name);
  }
};
xhr.open('GET', 'sample.xml', true);
xhr.send(null);

&#13;
&#13;
// raw xml data
// ================================

var data = `
<data>
  <group_user>
    <id type="integer">2671029</id>
    <created_at type="datetime">2013-01-20T21:42:01+00:00</created_at>
    <comments_count type="integer">0</comments_count>
    <moderator_at type="datetime" nil="true"/>
    <user>
      <id type="integer">5586131</id>
      <first_name>Melora</first_name>
    </user>
  </group_user>
  <group_user>
    <id type="integer">2026289</id>
    <created_at type="datetime">2012-06-08T04:22:38+00:00</created_at>
    <comments_count type="integer">38</comments_count>
    <moderator_at type="datetime" nil="true"/>
    <user>
      <id type="integer">6082517</id>
      <first_name>Cindy</first_name>
    </user>
  </group_user>
</data>
`;

var parser = new DOMParser();

// parse xml
var xmlDoc = parser.parseFromString(data, 'text/xml');

// all <user> tags
var userTags = xmlDoc.querySelectorAll('user');

// variable to store user objects
var users = []

// each <user>
userTags.forEach(function(tag) {
  // use object creation
  var user = {
    // find first <id> tag within <user>
    id: tag.querySelector('id').textContent,
    // find first <first_name> tag within <user>
    name: tag.querySelector('first_name').textContent
  };
  users.push(user);
});

// console.log('users:', users);

// each user object in users array
users.forEach(function(user) {
  console.log(user.id, user.name);
});
&#13;
&#13;
&#13;

答案 1 :(得分:0)

&#xD;&#xA;
&#xD;&#xA;
  var data =`&#xD;&#xA;&lt;数据&GT;&#的xD;&#XA; &LT; GROUP_USER&GT;&#的xD;&#XA; &lt; id type =“integer”&gt; 2671029&lt; / id&gt;&#xD;&#xA; &lt; created_at type =“datetime”&gt; 2013-01-20T21:42:01 + 00:00&lt; / created_at&gt;&#xD;&#xA; &lt; comments_count type =“integer”&gt; 0&lt; / comments_count&gt;&#xD;&#xA; &lt; moderator_at type =“datetime”nil =“true”/&gt;&#xD;&#xA; &lt;使用者&GT;&#的xD;&#XA; &lt; id type =“integer”&gt; 5586131&lt; / id&gt;&#xD;&#xA; &LT;如first_name&GT; Melora&LT; / first_name的&GT;&#的xD;&#XA; &LT; /使用者&gt;&#的xD;&#XA; &LT; / GROUP_USER&GT;&#的xD;&#XA;&#的xD;&#XA; &LT; GROUP_USER&GT;&#的xD;&#XA; &lt; id type =“integer”&gt; 2026289&lt; / id&gt;&#xD;&#xA; &lt; created_at type =“datetime”&gt; 2012-06-08T04:22:38 + 00:00&lt; / created_at&gt;&#xD;&#xA; &lt; comments_count type =“integer”&gt; 38&lt; / comments_count&gt;&#xD;&#xA; &lt; moderator_at type =“datetime”nil =“true”/&gt;&#xD;&#xA; &lt;使用者&GT;&#的xD;&#XA; &lt; id type =“integer”&gt; 6082517&lt; / id&gt;&#xD;&#xA; &LT;如first_name&GT;辛迪&LT; / first_name的&GT;&#的xD;&#XA; &LT; /使用者&gt;&#的xD;&#XA; &lt; / group_user&gt;&#xD;&#xA;&lt; / data&gt;&#xD;&#xA;`;&#xD;&#xA;&#xD;&#xA; var xmlDoc = $ .parseXML (data);&#xD;&#xA; // var xmlDoc = new DOMParser()。parseFromString(data,'text / xml');&#xD;&#xA;&#xD;&#xA; / / find all并遍历每个&lt; user&gt; &#xD;&#xA; $(xmlDoc).find('user')。each(function(index,tag){&#xD;&#xA; // tag  - &gt;&lt; user&gt; ... &lt; / user&gt;&#xD;&#xA;&#xD;&#xA; //在&lt; user&gt;&#xD;&#xA; var first_name = $(tag)中找到第一次出现&lt; first_name&gt; ).find('first_name')[0];&#xD;&#xA; // first_name = tag.querySelector('first_name');&#xD;&#xA; // first_name = tag.getElementsByTagName(' first_name')[0];&#xD;&#xA;&#xD;&#xA; //在&lt; user&gt;&#xD;&#xA;&#id&=中找到第一次出现的&lt; id&gt; var id = $ (tag).find('id')[0];&#xD;&#xA; // id = tag.querySelector('id');&#xD;&#xA; // id = tag.getElementsByTagName ('id')[0]&#xD;&#xA;&#xD;&#xA; //用户对象创建&#xD;&#xA; var user = {&#xD;&#xA; id: $(id).text(),&#xD;&#xA; //或&#xD;&#xA; // id:id.textContent&#xD;&#xA; // id:$(id)[ 0] .textContent,&#xD;&#xA; name:$(first_name).text()&#xD;&#xA; //或&#xD;&#xA; // name:first_name.textContent&#xD ;&#xA; //名称:$(first_name)[0] .textContent&#xD;&#xA;};&#xD;&#xA;&#xD;&#xA; con sole.log('id:'+ user.id);&#xD;&#xA; console.log('name:'+ user.name);&#xD;&#xA;});&#xD;&#xA;&#xD;&#xA; / *&#xD;&#xA ; xmlDoc.querySelectorAll('user')。forEach(function(tag,index){&#xD;&#xA; // ...&#xD;&#xA;});&#xD;&#xA ; * /&#xD;&#xA;&#xD;&#xA; / *&#xD;&#xA; var users = xmlDoc.findElementsByTagName('user');&#xD;&#xA; for (var index = 0; index&lt; users.length; index ++){&#xD;&#xA; var tag = users [index];&#xD;&#xA; // ...&#xD;&#xA;}&#xD;&#xA; * /  
&#xD;&#xA;
 &lt; script src =”https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“&gt;&lt; / script&gt;  
&#的xD;&#XA;
&#的xD;&#XA;
&#的xD;&#XA;

&#XA;