2015-06-10 70 views
1

我正在使用Node.js項目。我正在使用DOM Parser。如何在xml中獲取所有第一級嵌套節點?

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 
+0

'xmldoc.children [0] .children' – Xotic750

回答

1

擴展在我的意見。

DOMParser可以將存儲在字符串中的XML或HTML源解析爲DOM。

一旦我們有了DOM,我們就可以使用所有的document方法,包括標準的DOM樹遍歷。

如何在xml中獲取所有第一級嵌套節點?

通過DOM遍歷

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'; 
 
});
<pre id="out"></pre>

據我所知是沒有辦法與當前的CSS選擇器API來做到這一點,也沒有額外的標記。

如果選擇器是必須的,那麼你可以使用第三方庫,比如擴展CSS選擇器API的jQuery。

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'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<pre id="out"></pre>

+0

任何可能獲得特定的命名的子節點? – Vanarajan

+0

你能解釋一下你的意思嗎? – Xotic750

+0

查看更新(在我的問題中):如何僅獲取ExampleNode。這可能是不同的順序。 0或1或2. – Vanarajan

0

您可以使用XPath來獲取node元素是根node元素的直接子,例如:

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()) 
 
{ 
 
\t message += node.textContent + ", "; 
 
} 
 
$('#output').text(message);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="output"></div>

的首先/node返回了r或者node元素,第二個/node返回直接子的根。

參考:

+0

然而,這不會在IE中工作。 –

相關問題