【问题标题】:Javascript: getting to child nodes from XMLDocumentJavascript:从 XMLDocument 获取子节点
【发布时间】:2017-09-06 05:51:15
【问题描述】:

假设我在var response 中存储了以下 XMLHttpRequest().responseText:

{"success":true,"error":null,"body":"<modules>\n <total>5<\/total>\n <status>\n  <id>0<\/id>\n  <name>Archon<\/name>\n  <portCount>14<\/portCount>\n  <attached>true<\/attached>\n <\/status>\n <status>\n  <id>1<\/id>\n  <name>PC4<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>2<\/id>\n  <name>APC<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>3<\/id>\n  <name>SL1<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>4<\/id>\n  <name>SW5-1<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>5<\/id>\n  <name>ALC<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>65<\/id>\n  <name>VirtualModule<\/name>\n  <portCount>16<\/portCount>\n  <attached>true<\/attached>\n <\/status>\n<\/modules>\n"}

在那之后,我做了以下提取身体:

var json = JSON.parse(response);
var xml = json.body;

var xml 中的对象是一个字符串,所以我尝试将其解析为 XMLDocument:

var xmlDoc = new DOMParser().parseFromString(xml, 'text/xml');

这里的问题是我不知道如何到达子节点。我尝试了以下方法来获取总计的值(应该是 5):

console.log(xmlDoc.getElementsByTagName("modules")[0].childNodes[0].nodeValue);

但我得到的只是一个空白字符串。我觉得这应该很简单,但我根本不明白。一旦我想获得各种名称标签的值,我就更加无能为力了。

如何获取子节点的值?

【问题讨论】:

  • 您没有得到一个空字符串。 ...nodeValue.toString()[0].charCodeAt(0) = 10 是回车不为空。
  • @jrook 谢谢!这允许我遍历节点。有没有办法获取节点值?我知道var total = xmlDoc.children[0].children[0]; 是子节点,但是如何从中获取价值呢?
  • 通过使用nodeValue? .children[0].childNodes[0].nodeValue ="5"
  • 节点 total 没有任何子节点。虽然它有 childNodes。
  • @jrook 非常感谢!我设法得到了我需要的东西。

标签: javascript json xml xml-parsing


【解决方案1】:

字符串不为空。

console.log(xmlDoc.getElementsByTagName("modules")[0].childNodes[0].nodeValue.charCodeAt(0));

10

这是回车的ASCII码。您可以查看here 以了解有关childNodes 和children 的更多信息。 xmlDoc.children 将为您提供一个 HTML 集合,您可以从中遍历和提取​​信息。

注意:我建议编辑问题的标题,以便对将来可能会看到它的人更有帮助。

【讨论】:

    【解决方案2】:

    根据要求,请尝试以下代码。

    var response = {"success":true,"error":null,"body":"<modules>\n <total>5<\/total>\n <status>\n  <id>0<\/id>\n  <name>Archon<\/name>\n  <portCount>14<\/portCount>\n  <attached>true<\/attached>\n <\/status>\n <status>\n  <id>1<\/id>\n  <name>PC4<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>2<\/id>\n  <name>APC<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>3<\/id>\n  <name>SL1<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>4<\/id>\n  <name>SW5-1<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>5<\/id>\n  <name>ALC<\/name>\n  <portCount>0<\/portCount>\n  <attached>false<\/attached>\n <\/status>\n <status>\n  <id>65<\/id>\n  <name>VirtualModule<\/name>\n  <portCount>16<\/portCount>\n  <attached>true<\/attached>\n <\/status>\n<\/modules>\n"};
    
    var xml = response.body;
    
    var xmlDoc = new DOMParser().parseFromString(xml, 'text/xml');
    
    var allChildNodes = xmlDoc.documentElement.childNodes;
    
    var total = allChildNodes[1].textContent;
    
    alert(total);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多