Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XML相同的元素名_Javascript_Xml_Ajax_Dom - Fatal编程技术网

Javascript XML相同的元素名

Javascript XML相同的元素名,javascript,xml,ajax,dom,Javascript,Xml,Ajax,Dom,我有一个XML文件多次包含相同的元素名,如下所示。我只能找回第一个。想知道如何使用JavaScript检索所有4条注释。谢谢 <FRIENDSSTATUS> <STATUSFRIENDS id="2"> <STATUS>Life begins at the end of your comfort zone</STATUS> <DATETIME>2012-10-30 10:32:28</DATETIME>

我有一个XML文件多次包含相同的元素名,如下所示。我只能找回第一个。想知道如何使用JavaScript检索所有4条注释。谢谢

<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 = "";
}
}

在本例中,将XML分配给变量myXmlString,并按如下方式读取:

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

如何访问第一个状态朋友的评论的示例

大概是这样的:

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

我没有时间发布完整的代码示例,但JS支持XPath,您可以通过以下Qpath查询获得注释:

/FRIENDSSTATUS/STATUSFRIENDS[@id=3]/COMMENTS

下面是我测试Xpath语法的地方:

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