如何在XML表中乘以XML值?

时间:2016-07-20 19:02:06

标签: javascript xml dom

XML表(在Firefox 47.0.1中呈现)

How the XML table renders

.XML文件不包含Total Price的节点,但我仍然可以通过乘以PRICE * QUANTITY在XML表中派生它。

我知道这个解决方案:

y[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue * y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue

但是我想将变量相乘:

p * q 

所以我已经为PRICE和QUANTITY(p和q)声明了变量:

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

但这只会产生第一行(单元1)的正确结果。

为什么这不起作用?


这是我的example.xml

<?xml version="1.0" encoding="UTF-8"?>
<CUSTOMER_ORDER>
    <UNIT>
        <NAME>Unit 1</NAME>
        <QUANTITY>45</QUANTITY>
        <PRICE>25.99</PRICE>
    </UNIT>
    <UNIT>
        <NAME>Unit 2</NAME>
        <QUANTITY>209</QUANTITY>
        <PRICE>9.95</PRICE>
    </UNIT>
    <UNIT>
        <NAME>Unit 3</NAME>
        <QUANTITY>80</QUANTITY>
        <PRICE>14.99</PRICE>
    </UNIT>
    <UNIT>
        <NAME>Unit 4</NAME>
        <QUANTITY>156</QUANTITY>
        <PRICE>35.88</PRICE>
    </UNIT>
    <UNIT>
        <NAME>Unit 5</NAME>
        <QUANTITY>25</QUANTITY>
        <PRICE>199.00</PRICE>
    </UNIT>
</CUSTOMER_ORDER>

这是我的测试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 i;
var xmlDoc = xml.responseXML;
var table="<tr><th>Unit</th><th>Price</th><th>Quantity</th><th>Total Price</th></tr>";
var y = xmlDoc.getElementsByTagName("UNIT");
for (i = 0; i > y.length; i++);
var p = y[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue;  
var q = y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue; 
for (i = 0; i < y.length; i++)
{
table += "<tr><td>" +
y[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue +
"</td><td>" +
y[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue +
"</td><td>" +
y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue +
"</td><td>" +
p * q + // This is the total price column yielding 1169.55 across all rows.
"</td></tr>";
      }
      document.getElementById("test").innerHTML = table;
    }
  </script>

</body>

</html>

1 个答案:

答案 0 :(得分:0)

问题结果是语法,解决方案非常简单。感谢所有贡献他们意见的人。

您可以在此处查看最终的测试功能(xml):

function testFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table="<tr><th>Unit</th><th>Price</th><th>Quantity</th><th>Total Price</th></tr>";
var y = xmlDoc.getElementsByTagName("UNIT");
for (i = 0; i < y.length; i++) 
{
var p = y[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue;
var q = y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue;
var n = y[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue;

table += "<tr><td>" +
n +
"</td><td>" +
p +
"</td><td>" +
q +
"</td><td>" +
p*q + // This is the total price column. 
"</td></tr>";
}
document.getElementById("test").innerHTML = table;
}