【问题标题】:get XML node childs in javascript在 javascript 中获取 XML 节点子节点
【发布时间】:2013-04-11 09:00:25
【问题描述】:

我希望解析这样的 XML 文件

<class>
    <subject>
        <knowledgeLevel> 1 </knowledgeLevel>
        <subjectName> Try1 </subjectName>
        <theory>
            <tutorial> Quickly Explain Try1 </tutorial>
            <full> Largely Explain Try1 </full>
        </theory>
        <example>
            <id> 1 </id>
            <code> some code </code>
            <level> easy </level>
        </example>
        <example>
            <id> 2 </id>
            <code> some code </code>
            <level> hard </level>
        </example>
    </subject>
</class>

考虑到最后文件中会出现多个主题,如何让理论和示例的子孩子用Javascript编写HTML表格?

【问题讨论】:

  • 在循环通过 XML 解析器查看我的答案?[1] [1]:stackoverflow.com/a/15612898/1058406
  • @Janinho67 查看$.parseXML(),它会将其解析为类似数组的结构,然后将字符串读写并连接在一起,直到您可以形成一个html table
  • @Janinho67:作为纯文本字符串的 XML 文件是什么格式的?如果它是通过 XHR 加载的,它应该已经是一个 DOM 文档(不需要解析它,只需遍历它)
  • xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET","subjects.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML;

标签: javascript html xml


【解决方案1】:

这个简单的脚本应该可以满足您的目的;它将 XML 包装在一个临时的 &lt;div&gt; 元素中,以便您可以遍历它。

var div = document.createElement('div');

div.innerHTML = xml;

function getChildElements(node, fn)
{
  [].forEach.call(node.childNodes, function(node) {
    if (node.nodeType == 1) {
      fn(node);
    }
  });
}

getChildElements(div.firstChild, function(subject) {
  getChildElements(subject, function(info) {
      console.log(info.tagName);
      console.log(info.textContent);
  });
});

Demo

【讨论】:

  • 不,不要尝试在 HTML 文档中加载 XML!
  • @Bergi 你介意解释一下你所说的这个“教条”吗? :)
  • 我不认为浏览器的 HTML 解析器非常适合 XML(而且我担心标准一致性或未知标签,尤其是在旧浏览器中)。如果是 HTML,您尝试解析 &lt;div&gt; 很好,但为什么在有 DOMParser/xhr.responseXML 时将其用于 XML?
  • @Bergi 好吧,我必须承认我不知道DOMParser :)
  • @Bergi 不过,难道 DOMParser 不存在于 IE 中吗?
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2015-02-28
  • 1970-01-01
相关资源
最近更新 更多