通过AJAX处理XML中的空节点

时间:2018-04-17 18:41:17

标签: javascript ajax xml

我有这个代码来解析XML。我如何处理XML中的空节点?目前,当“v2”节点为空时,根本没有输出任何输出......

<script>
function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      myFunction(this);
    }
  };
  xhttp.open("GET", "sample.xml", true);
  xhttp.send();
}
function myFunction(xml) {
  var i;
  var xmlDoc = xml.responseXML;
  var table="<tr><th>c1</th><th>c2</th></tr>";
  var x = xmlDoc.getElementsByTagName("product");
  for (i = 0; i <x.length; i++) { 
    table += "<tr><td>" +
    x[i].getElementsByTagName("v1")[0].childNodes[0].nodeValue +
    "</td><td>" +
    x[i].getElementsByTagName("v2")[0].childNodes[0].nodeValue +
    "</td></tr>";
  }
  document.getElementById("demo").innerHTML = table;
}
</script>

XML:

<products>
    <product>
        <v1>some data</v1>
        <v2/>
    </product>
</products>

2 个答案:

答案 0 :(得分:1)

只需检查它是否为空,然后使用数据,否则只是跳过它。

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      myFunction(this);
    }
  };
  xhttp.open("GET", `data:text/xml,<products>
    <product>
        <v1>some data</v1>
        <v2/>
    </product>
</products>`, true);
  xhttp.send();
}
function myFunction(xml) {
  var i;
  var xmlDoc = xml.responseXML;
  var table="<tr><th>c1</th><th>c2</th></tr>";
  var x = xmlDoc.getElementsByTagName("product");
  for (i = 0; i <x.length; i++) { 
    table += "<tr><td>" +
    x[i].getElementsByTagName("v1")[0].childNodes[0].nodeValue + "</td><td>";
    var v2c = x[i].getElementsByTagName("v2")[0].childNodes;
    if (v2c.length > 0){
      table += v2c[0].nodeValue;
    }
    table += "</td></tr>";
  }
  document.getElementById("demo").innerHTML = table;
}
<button onclick="loadDoc()">Load</button>
<table id="demo" border="1"></table>

答案 1 :(得分:0)

自己的修订:

if (v2c.length > 0){
   table += v2c[0].nodeValue + "</td><td>";
} else {
   table += "</td><td>";
}