2012-11-21 262 views
1

我有一個XML文件不止一次包含相同的元素名稱,如下所示。我只能檢索第一個。想知道如何使用JavaScript檢索所有4個「評論」。謝謝!Javascript XML相同的元素名稱

<FRIENDSSTATUS> 
    <STATUSFRIENDS id="2"> 
    <STATUS>Life begins at the end of your comfort zone</STATUS> 
    <DATETIME>2012-10-30 10:32:28</DATETIME> 
    <FIRSTNAME>Malcolm</FIRSTNAME> 
    <LASTNAME>Landgraab</LASTNAME> 
    <COMMENTS datetime="2012-11-18 22:13:28" firstname="Ian" lastname="Tellerman">rr</COMMENTS> 
    <COMMENTS datetime="2012-11-18 22:13:39" firstname="Ian" lastname="Tellerman">hello</COMMENTS> 
    <COMMENTS datetime="2012-11-19 14:36:24" firstname="Ian" lastname="Tellerman">test</COMMENTS> 
    <COMMENTS datetime="2012-11-19 14:45:52" firstname="Ian" lastname="Tellerman">test4</COMMENTS> 
    </STATUSFRIENDS> 
    <STATUSFRIENDS id="3"> 
    <STATUS>Prometheus. Fantastic film!!!!</STATUS> 
    <DATETIME>2012-10-30 10:32:28</DATETIME> 
    <FIRSTNAME>Mansa</FIRSTNAME> 
    <LASTNAME>Bendett</LASTNAME> 
    <COMMENTS datetime="2012-11-18 22:14:46" firstname="Ian" lastname="Tellerman">wrong</COMMENTS> 
    </STATUSFRIENDS> 
</FRIENDSSTATUS> 

的JavaScript代碼:

xmlDoc = xmlhttp.responseXML; 
$table = "<table border='1'>"; 

var element = xmlDoc.getElementsByTagName("FRIENDSSTATUS"); 
var elements = xmlDoc.getElementsByTagName("STATUSFRIENDS"); 
var comments = xmlDoc.getElementsByTagName("COMMENTS"); 

    if(xmlDoc.documentElement !== null) 
    { 

    var root; 
    if (navigator.userAgent.indexOf("Firefox") > 0) 
    var root = element[0].childElementCount; 

    if (navigator.userAgent.indexOf("MSIE") > 0) 
    var root = xmlDoc.documentElement.childNodes.length; 

    for(i=0; i<root; i++){ 
$strStats = ""; 
$strComments = ""; 
$strDateTime = ""; 
$strFirstname = ""; 
$strLastname = ""; 

$strCommentDateTime = ""; 
$strCommentFirstName = ""; 
$strCommentLastName = ""; 
$strStatusID = ""; 

if(navigator.userAgent.indexOf("Firefox") > 0){ 
for(y=0;y < elements[i].childElementCount;y++) 
{ 
$strStatusID = elements[i].getAttribute("id"); 
    if(strStatus = elements[i].getElementsByTagName("STATUS")) 
    { 
     $strStats = strStatus[0].firstChild.nodeValue; 

    } 

    if(strStatus = elements[i].getElementsByTagName("DATETIME")) 
    { 
     $strDateTime = strStatus[0].firstChild.nodeValue; 

    } 

    if(strStatus = elements[i].getElementsByTagName("FIRSTNAME")) 
    { 
     $strFirstname = strStatus[0].firstChild.nodeValue; 

    } 

    if(strStatus = elements[i].getElementsByTagName("LASTNAME")) 
    { 
     $strLastname = strStatus[0].firstChild.nodeValue; 

    } 
    if(strComm = elements[i].getElementsByTagName("COMMENTS")) 
    { 
     $strComments = strComm[0].firstChild.nodeValue; 
     $strCommentDateTime = comments[i].getAttribute("datetime"); 
     $strCommentFirstName = comments[i].getAttribute("firstname"); 
     $strCommentLastName = comments[i].getAttribute("lastname"); 

     $strComments += "<br>" + $strCommentFirstName + " " + $strCommentLastName + " " + $strCommentDateTime + "</br></br>"; 
    } 
    $strStats = $strStats + " " + $strLastname + " " + $strFirstname + " " + $strDateTime; 
    $strFullName = $strFirstname + " " + $strLastname; 
    $strDateTime = ""; 
    $strFirstname = ""; 
    $strLastname = ""; 
} 
} 

回答

0

將您的XML給一個變量,(myXmlString在這個例子中),和如下閱讀:

var parser=new DOMParser(); 
doc=parser.parseFromString(myXmlString,'text/xml'); 
var comments = doc.getElementsByTagName("COMMENTS") // Returns a array of those "comments". 
0

怎樣的一個例子訪問第一個STATUSFRIENDS的意見。 jsFiddle demo here

var parseXml; 

if (typeof window.DOMParser != "undefined") { 
    parseXml = function(xmlStr) { 
     return (new window.DOMParser()).parseFromString(xmlStr, "text/xml"); 
    }; 
} else if (typeof window.ActiveXObject != "undefined" && 
     new window.ActiveXObject("Microsoft.XMLDOM")) { 
    parseXml = function(xmlStr) { 
     var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = "false"; 
     xmlDoc.loadXML(xmlStr); 
     return xmlDoc; 
    }; 
} else { 
    throw new Error("No XML parser found"); 
} 

var xml = parseXml(xmlStr); // assuming xmlStr contains your XML 
var commentsList = xml.documentElement.childNodes[0].getElementsByTagName("COMMENTS"); 
var output = ""; 

for(var i=0; i<commentsList.length; i++) 
{ 
    output += commentsList[i].firstChild.nodeValue + "<br />"; 
} 

document.getElementById("comments").innerHTML = output; 
0

事情是這樣的:

var str = 'your XML as a string', 
    parser, xml; 

if (window.DOMParser) { 
    parser = new DOMParser(); 
    xml = parser.parseFromString(str, "text/xml"); 
} 
else { // IE 
    xml = new ActiveXObject("Microsoft.XMLDOM"); 
    xml.async = "false"; 
    xml.loadXML(str); 
} 

var nodes = xml.childNodes[0].getElementsByTagName('COMMENTS'); 

var i, l = nodes.length, comments = []; 
for (i = 0; i < l; i++) { 
    comments.push({ 
     firstname: nodes[i].getAttribute('firstname'), 
     lastname: nodes[i].getAttribute('lastname'), 
     datetime: nodes[i].getAttribute('datetime'), 
     content: nodes[i].childNodes[0].nodeValue 
    }); 
} 

console.log(comments); 
相關問題