如何在xml中获取所有第一级嵌套节点?

时间:2015-06-10 09:42:33

标签: javascript xml node.js

我正在使用Node.js项目。我正在使用DOM Parser。

    var parser = new DOMParser();
    var xmldoc = parser.parseFromString(xml,"text/xml");

这里的XML是字符串。

我想读取所有第一级子节点(不在子级节点中)。

 Node (1)
    Node (2)
       Node (3)
    Node (4)

我被阅读节点困住了。所有节点都是嵌套的同名。

我正在使用querySelectorAll(“Node”)。它获取所有嵌套节点。

如何阅读所有第一级子示例:Node2,Node4?

有人帮我吗?

提前致谢。

更新

  Node (1)
       other node
       ExampleNode
           ExampleNode
       Node (2)
           Node (3)
       Node (4)
       ExampleNode

2 个答案:

答案 0 :(得分:1)

扩展我的评论。

DOMParser可以将存储在字符串中的XML或HTML源解析为DOM。

一旦我们有了DOM,我们就可以使用所有document方法,包括标准的DOM树遍历。

  

如何在xml中获取所有第一级嵌套节点?

通过DOM遍历

<div id="parentDiv" style="position: absolute; top: 100px;">
  <div id="containerDiv" style="overflow: auto; position: relative; height: 150px;">
       <div>List 1</div> <!--Child div elements-->
       <div>List 2</div>
       <div>List 3</div>
       <div>List 4</div>
  </div>
</div
var xmlString = '<node>(1)<node>(2)<node>(3)</node></node><node>(4)</node></node>',
    parser = new DOMParser(),
    xmldoc = parser.parseFromString(xmlString, 'text/xml'),
    firstLevel = xmldoc.children[0].children,
    pre = document.getElementById('out');

pre.textContent = 'Number of first level nodes: ' + firstLevel.length + '\n';
[].forEach.call(firstLevel, function (node) {
    pre.textContent += 'node text: ' + node.firstChild.textContent + '\n';
});

据我所知,使用当前的CSS选择器API无法做到这一点,而且没有额外的标记。

如果必须使用选择器,那么您可以使用像jQuery那样扩展CSS选择器API的第三方库。

<pre id="out"></pre>
var xmlString = '<node>(1)<node>(2)<node>(3)</node></node><node>(4)</node></node>',
    xmldoc = $.parseXML(xmlString),
    $firstLevel = $('node:first > node', xmldoc),
    $pre = $('#out');

$pre.append('Number of first level nodes: ' + $firstLevel.length + '\n');
$.each($firstLevel, function (index, node) {
    $pre.append('node text: ' + $(node).contents().eq(0).text() + '\n');
});

答案 1 :(得分:0)

您可以使用xpath获取根node元素的 direct child node元素,例如:

&#13;
&#13;
var xmlString = '<node>1<node>2<node>3</node></node><node>4</node></node>';
var doc = new DOMParser().parseFromString(xmlString, 'text/xml');
var result = doc.evaluate('/node/node', doc, null, XPathResult.ANY_TYPE , null);
var message = "Direct child nodes in this XML document are: ";//}
for(var node = result.iterateNext(); node; node = result.iterateNext())
{
	message += node.textContent + ", ";
}
$('#output').text(message);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
&#13;
&#13;
&#13;

第一个/node返回根node元素,第二个/node返回根直接子

供参考: