无法克服空字符串

时间:2013-11-01 04:15:04

标签: javascript xml parsing dom

你会很快看到我不是程序员,只是在最后一刻踩到了帮助朋友的地方。使用XML文件,我们试图克服一个空字符串。

这是我的代码:

{ 
  document.write("<tr><td align='left'><font color='#333333'>");
  document.write(x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue);
  document.write(x[i].getElementsByTagName("Party")[0].childNodes[0].nodeValue);
  document.write("</font></td><td align='left'>");
  document.write(x[i].getElementsByTagName("Vote")[0].childNodes[0].nodeValue);
  document.write("</td><td align='right'>");
  document.write(x[i].getElementsByTagName("Total")[0].childNodes[0].nodeValue);
  document.write("</td></tr>");
}

因为“Name”并不总是与“Name”相关联,所以当元素为空时脚本会停止。

在这个例子中,我该如何克服它?

我试过这个,没有任何运气:

daNode = x[i].getElementsByTagName("Party")[0];

if (daNode.childNodes.length) {
  da = daNode.childNodes[0].nodeValue;
} else {
  da = "none"
}

谢谢!

编辑以添加评论中的XML:

<xml>
  <Election>
    <Candidates>
      <Candidate> 
        <Name>Max</Name>
        <Party>Action</Party>
        <Vote>42 votes</Vote> 
        <Total>10 %</Total> 
      </Candidate>
      <Candidate> 
        <Name>John</Name>
        <Party></Party>
        <Vote>82 votes</Vote>
        <Total>20 %</Total>
      </Candidate> 
      <Candidate> 
        <Name>Simon</Name>
        <Party>Action</Party>
        <Vote>1 vote</Vote>
        <Total>1 %</Total>
      </Candidate>
    </Candidates>
  </Election>
</xml>

1 个答案:

答案 0 :(得分:0)

唉,我发现了这个问题。文本节点(标记的实际内容)被视为标记的子级,因此没有文本节点的<Party>标记在.childNodes[0]返回null,因此.nodeValue处的错误。这是一个修复:

{ 
   var partyNode = x[i].getElementsByTagName("Party")[0];
   var party = partyNode.firstChild ? partyNode.firstChild.nodeValue : "none";

   document.write("<tr><td align='left'><font color='#333333'>");
   document.write(x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue);
   document.write(party);  
   document.write("</font></td><td align='left'>");
   document.write(x[i].getElementsByTagName("Vote")[0].childNodes[0].nodeValue);
   document.write("</td><td align='right'>");
   document.write(x[i].getElementsByTagName("Total")[0].childNodes[0].nodeValue);
   document.write("</td></tr>");
}