需要使用原始javascript解析此XML代码的帮助吗

需要使用原始javascript解析此XML代码的帮助吗,javascript,ajax,xml-parsing,Javascript,Ajax,Xml Parsing,XML结构如下所示,我试图将数据输出到HTML表中,但内部循环只是返回null,而不是元素中的文本,我在JavaScript中对出现问题的部分进行了注释 <playlist> <id>PLnqdTIS_B64I7zbB_tPgvHiFTnmIqpT0u</id> <title>Yanni Covers</title> <numVideos>23</numVideos> <video&

XML结构如下所示,我试图将数据输出到HTML表中,但内部循环只是返回null,而不是元素中的文本,我在JavaScript中对出现问题的部分进行了注释

<playlist>
   <id>PLnqdTIS_B64I7zbB_tPgvHiFTnmIqpT0u</id>
   <title>Yanni Covers</title>
   <numVideos>23</numVideos>
   <video>
      <id>Kg42VjNo0Pw</id>
      <title>Yanni - Before I Go Piano Cover</title>
      <duration>4:33</duration>
      <thumbnail>http://i1.ytimg.com/vi/Kg42VjNo0Pw/1.jpg</thumbnail>
      <datePublished>2014-04-29</datePublished>
      <views>156</views>
      <favorites>0</favorites>
      <numRated>3</numRated>
      <author>migoicons</author>
   </video>
   <video>
      <id>CKtH0H416Zg</id>
      <title>Yanni - Face In The Photograph</title>
      <duration>4:20</duration>
      <thumbnail>http://i1.ytimg.com/vi/CKtH0H416Zg/1.jpg</thumbnail>
      <datePublished>2014-03-27</datePublished>
      <views>562</views>
      <favorites>0</favorites>
      <numRated>13</numRated>
      <author>migoicons</author>
   </video>
</playlist>

PLnqdTIS_B64I7zbB_tPgvHiFTnmIqpT0u
亚尼封面
23
Kg42VjNo0Pw
雅尼-在我去钢琴封面之前
4:33
http://i1.ytimg.com/vi/Kg42VjNo0Pw/1.jpg
2014-04-29
156
0
3.
migoicons
CKtH0H416Zg
亚尼-照片中的脸
4:20
http://i1.ytimg.com/vi/CKtH0H416Zg/1.jpg
2014-03-27
562
0
13
migoicons
JavaScript

var playlist = "";

function loadXML() {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            playlist = xmlhttp.responseXML;
            var html = "";
            html += "<b>Playlist ID : </b>" + getNodeVal('id') + "<br />";
            html += "<b>Playlist Title : </b>" + getNodeVal('title') + "<br />";
            html += "<b>Playlist Description : </b>" + getNodeVal('description') + "<br />";
            html += "<b>Playlist Videos : </b>" + getNodeVal('numVideos') + "<br />";
            html += "<br /><strong>List of videos</strong> <br /><br />";

            html += "<table><tr>\n\
                    <th>Index</th>";

            for (var x = 0; x < getEBTN('video')[0].childNodes.length; x++) {

                html += "<th>" +
                  getEBTN('video')[0].childNodes[x].tagName + " </th>";
            }
            html += "</tr>";
            for (var a = 0; a < getEBTN('video').length; a++) {
                html += "<tr><td>" + a + "</td>";

                for (var y = 0; y < getEBTN('video')[0].childNodes.length; y++) {
                    /* can't get this part to work just getting null instead of text*/

                   html += "<td>" + getEBTN('video')[a].childNodes[y].nodeValue + "</td>";         

                }
                html += "</tr>";

            }
            html += "</table>";
            document.getElementById("myDiv").innerHTML = html;
        }
    }
    xmlhttp.open("GET", "xml_server.php?id=nqdTIS_B64I7zbB_tPgvHiFTnmIqpT0u", true);
    xmlhttp.send();
}

function getEBTN(tagName) {
    return playlist.getElementsByTagName(tagName);
}

function getNodeVal(tagName) {
    return getEBTN(tagName)[0].childNodes[0].nodeValue;
}
window.onload = loadXML;
var playlist=”“;
函数loadXML(){
var-xmlhttp;
if(window.XMLHttpRequest){
xmlhttp=新的XMLHttpRequest();
}否则{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
playlist=xmlhttp.responseXML;
var html=“”;
html++=“播放列表ID:”+getNodeVal('ID')+“
”; html++=“播放列表标题:”+getNodeVal('Title')+“
”; html++=“播放列表说明:”+getNodeVal('Description')+“
”; html++=“播放列表视频:”+getNodeVal('numVideos')+“
”; html+=“
视频列表

”; html+=“\n\ 索引”; 对于(var x=0;x
试图在JavaScript中解析XML是一种特殊的困难


试试X2JS:

让我来解决这个问题:

getEBTN('video')
是视频元素的节点列表

getEBTN('video')[a]
是这些视频元素之一

getEBTN('video')[a].childNodes
是子元素的节点列表

getEBTN('video')[a].childNodes[y]
是一个子元素,例如
Kg42VjNo0Pw

也就是说,元素没有
nodeValue


也许你想要
getEBTN('video')[a].childNodes[y].textContent

你的建议奏效了,但有点奇怪。例如警报(getEBTN('title')[0].childNodes[0].nodeValue);工作并返回播放列表的标题,但nodeValue在循环中不工作为什么可以?我想我在一个视频子元素中找到了答案,其中没有数据,例如,您不能在空元素上使用nodeValue
getEBTN('title')[0]
is
Yanni cover
。它的
childNodes[0]
是文本节点
Yanni Covers
,它确实有一个
nodeValue
,我认为您链接到的答案是指没有
.childNodes[0]
,因为空元素没有子节点。