2016-07-23 25 views
0

How the XML table should renderFehlende Knoten in XML DOM - einfaches Beispiel

Die Tabelle nicht machen, weil die XML-doc ist ein Knoten für MENGE in UNIT 3.

fehlt Wie überspringen wir fehlende Knoten im XML-DOM?


Das XML-doc (example.xml)

<?xml version="1.0" encoding="UTF-8"?> 
<CUSTOMER_ORDER> 
    <UNIT> 
     <ID>Unit 1</ID> 
     <QUANTITY>45</QUANTITY> 
     <PRICE>25.99</PRICE> 
    </UNIT> 
    <UNIT> 
     <ID>Unit 2</ID> 
     <QUANTITY>209</QUANTITY> 
     <PRICE>9.95</PRICE> 
    </UNIT> 
    <UNIT> 
     <ID>Unit 3</ID> <!-- The QUANTITY node for Unit 3 is missing --> 
     <PRICE>14.99</PRICE> 
    </UNIT> 
    <UNIT> 
     <ID>Unit 4</ID> 
     <QUANTITY>156</QUANTITY> 
     <PRICE>35.88</PRICE> 
    </UNIT> 
    <UNIT> 
     <ID>Unit 5</ID> 
     <QUANTITY>25</QUANTITY> 
     <PRICE>199.00</PRICE> 
    </UNIT> 
</CUSTOMER_ORDER> 

Hier ist der XML-DOM (mit HTML)

<!DOCTYPE html> 
<html> 
<style> 
table,th,td { 
    border : 2px solid black; 
    border-collapse: collapse; 
} 
th,td { 
    padding: 5px; 
} 
</style> 
<body> 

<body onload="loadXMLDoc()"> 

<table id="test"></table> 

<script> 
function loadXMLDoc() { 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    testFunction(xmlhttp); 
    } 
    }; 
    xmlhttp.open("GET", "example.xml", true); 
    xmlhttp.send(); 
} 
function testFunction(xml) { 
    var table="<tr><th>Unit</th><th>Price</th><th>Quantity</th></tr>"; 
    var xmlDoc = xml.responseXML; 
    var i; 
    var y = xmlDoc.getElementsByTagName("UNIT"); 
    for (i = 0; i < y.length; i++) 
    { 
    var u = y[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue; 
    var p = y[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue; 
    var q = y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue; 

    table += "<tr><td>" + 
    u +       // Unit ID column 
    "</td><td>" + 
    p +       // PRICE column 
    "</td><td>" + 
    q +       // QUANTITY column 
    "</td></tr>"; 
    } 
    document.getElementById("test").innerHTML = table; 
} 
</script> 

</body> 
</html> 
+0

Es ist Ihr eigener Code, der davon ausgeht, dass es immer ein "QUANTITY" -Element geben wird. Überprüfen Sie, ob bereits vorhanden ist, bevor Sie nach dem Wert suchen. – Pointy

+0

Das scheint eine vernünftige Lösung zu sein. Wie würdest du das machen? – logoologist

+0

Testen Sie einfach, ob 'y [i] .getElementsByTagName (" QUANTITY "). Length" mindestens "1" ist, bevor Sie fortfahren. – Pointy

Antwort

0

Wie @Pointy Überprüfung sagte, wenn es eine Menge ist vor der Einstellung q Wenn die MENGE fehlt, dann stellen Sie den Standardwert auf 1 oder den gewünschten Wert ein.


ersetzen diese:

var q = y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue; 

mit:

var qElem = y[i].getElementsByTagName("QUANTITY"); //Get quantity elems 
var q = (qElem.length > 0) ? qElem[0].childNodes[0].nodeValue : 1; //Check if there is anything in qElem if not set q to 1 

Diese funktionieren sollte.

+0

Unglaublich! Danke für diese perfekte Antwort. – logoologist

+0

Ich bin froh, dass ich helfen konnte. –