2017-04-11 58 views
0

假設我有以下的XMLHttpRequest()的responseText存儲在var response的Javascript:讓子節點從爲XMLDocument

{"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); 

但我得到的只是一個空白字符串。我覺得這應該是非常簡單的事情,但我根本沒有得到它。一旦我想要獲得各種名稱標籤的價值,我就更加無能爲力了。

我該如何去獲取子節點的值?

+0

您沒有得到空字符串。 '... nodeValue.toString()[0] .charCodeAt(0)= 10'這是回車不是空的。 – jrook

+0

@jrook謝謝!這允許我遍歷節點。有沒有辦法獲得節點值?我明白'var total = xmlDoc.children [0] .children [0];'是子節點,但是如何從中獲取值? – LChaos2

+0

通過使用nodeValue? '.children [0] .childNodes [0] .nodeValue =「5」' – jrook

回答

1

字符串不是空的。

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

10 

這是回車的ASCII代碼。你可以看看here瞭解更多關於childNodeschildren的信息。 xmlDoc.children將爲您提供一個HTML集合,您可以遍歷並從中提取信息。

注意:我建議編輯問題的標題是爲那些誰可能會看到它在未來更有幫助。

0

按照要求,請嘗試下面的代碼。

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);