[英]how to pull data from am XML file and show it on html table
這是我的代碼(取自舊帖子)。 我做錯了什么?
1.First one test.xml,一個用於存儲數據的xml文件。
<?xml version="1.0"?>
<item>
<entry>
<Date>1/01/2001</Date>
<ProductName>milk</ProductName>
<Quantity>10</Quantitty>
<GrossPrice>50</GrossPrice>
<Profit>10</Profit>
</entry>
<entry>
<Date>2/10/2007</Date>
<ProductName>milk</ProductName>
<Quantity>20</Quantitty>
<GrossPrice>100</GrossPrice>
<Profit>20</Profit>
</entry>
</item>
2.第二個是demo.html,用於顯示存儲在xml文件中的數據。 這個html有一個輸入標簽作為文本和一個提交按鈕。 單擊提交按鈕,它應搜索給定的輸入並顯示輸出。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
Product Name: <input type="text" name="ProductName" id="input">
<br />
<input type="submit" value="Submit" onClick="searchXML()">
<br />
<br />
<div id="results">
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script language="JavaScript" type="text/javascript">
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
xhttp.send();
return xhttp.responseXML;
}
function searchXML()
{
xmlDoc=loadXMLDoc("test.xml");
x=xmlDoc.getElementsByTagName("ProductName");
input = document.getElementById("input").value;
size = input.length;
if (input == null || input == "")
{
document.getElementById("results").innerHTML= "Please enter a Product Name!";
return false;
}
for (i=0;i<x.length;i++)
{
startString = ProductName.substring(0,size);
if (startString.toLowerCase() == input.toLowerCase())
{
date=xmlDoc.getElementsByTagName("Date")[i].childNodes[0].nodeValue;
product=xmlDoc.getElementsByTagName("ProductName")[i].childNodes[0].nodeValue;
quantity=xmlDoc.getElementsByTagName("Quantity")[i].childNodes[0].nodeValue;
grossprice=xmlDoc.getElementsByTagName("GrossPrice")[i].childNodes[0].nodeValue;
profit=xmlDoc.getElementsByTagName("Profit")[i].childNodes[0].nodeValue;
divText = "<h1>The contact details are:</h1><br /><table border=1><tr><th>Date</th><th>Product</th><th>Quantity</th><th>Gross Price</th><th>Profit</th></tr>" + "<tr><td>" + date + "</td><td>" + product + "</td><td>" + quantity + "</td><td>" + grossprice + "</td><td>" + profit + "</td></tr>" + "</table>";
break;
}
else
{
divText = "<h2>The product does not exist.</h2>";
}
}
document.getElementById("results").innerHTML= divText;
}
</script>
</body>
</html>
我在chrome上遇到錯誤---
XMLHttpRequest無法加載file:/// C:/Users/chandan/Desktop/demo/test/test.xml。 交叉源請求僅支持協議方案:http,數據,chrome擴展,https,chrome-extension-resource。 demoNew.html:28 Uncaught NetworkError:無法在'XMLHttpRequest'上執行'send':無法加載'file:/// C:/Users/chandan/Desktop/demo/test/test.xml'。
但是當我在firefox上運行它時,它正在加載xml文件,但沒有顯示輸出,在Html的第44行給出了錯誤。
怎么修?
您正嘗試訪問本地文件,並且大多數瀏覽器(例如最近的Chrome)默認禁用它。 干凈且HTML5友好的方式是通過一個對話框和FileAPI
http://www.html5rocks.com/en/tutorials/file/dndfiles/
以下是執行任務的一個示例:一個對話框允許您選擇xml文件並根據需要顯示信息。
我的主要來源是這一個: https : //github.com/MounirMesselmeni/html-fileapi
以下是如何調整代碼
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>HTML5 File API</title>
</head>
<body >
<div>
<form class="form-horizontal well">
<legend>
<h3>
<div id="title">HTML5 File API</div>
</h3>
</legend>
<fieldset>
<label for="xmlFileinput"> <strong>XML File:</strong>
</label>
<input type="file" id="xmlFileinput" onchange="handleFiles(this.files)"
accept=".xml">
</div>
</fieldset>
Product Name: <input type="text" name="ProductName" id="input">
</form>
<div id="output">
</div>
<div id="results">
</div>
</div>
<br>
<br>
<footer>
<center>
<p>© Gabriel Ter-Minassian + Mounir Messelmeni 2012</p>
</center>
</footer>
<script type="text/javascript">
function handleFiles(files) {
// Check for the various File API support.
if (window.FileReader) {
// FileReader are supported.
getAsText(files[0]);
} else {
alert('FileReader are not supported in this browser.');
}
}
function getAsText(fileToRead) {
var reader = new FileReader();
// Handle errors load
reader.onload = loadHandler;
reader.onerror = errorHandler;
// Read file into memory as UTF-8
reader.readAsText(fileToRead);
}
function loadHandler(event) {
var xml = event.target.result;
//alert(xml);
doc=StringtoXML(xml);
searchXML(doc);
}
function errorHandler(evt) {
if(evt.target.error.name == "NotReadableError") {
alert("Canno't read file !");
}
}
function StringtoXML(text){
if (window.ActiveXObject){
var doc=new ActiveXObject('Microsoft.XMLDOM');
doc.async='false';
doc.loadXML(text);
} else {
var parser=new DOMParser();
var doc=parser.parseFromString(text,'text/xml');
}
return doc;
}
function searchXML(xmlDoc)
{
x=xmlDoc.getElementsByTagName("ProductName");
input = document.getElementById("input").value;
size = input.length;
divText=""
if (input == null || input == "")
{
document.getElementById("results").innerHTML= "Please enter a Product Name!";
return false;
}
for (i=0;i<x.length;i++)
{
startString = x[i].childNodes[0].nodeValue;
if (startString.toLowerCase() == input.toLowerCase())
{
date=xmlDoc.getElementsByTagName("Date")[i].childNodes[0].nodeValue;
product=xmlDoc.getElementsByTagName("ProductName")[i].childNodes[0].nodeValue;
quantity=xmlDoc.getElementsByTagName("Quantity")[i].childNodes[0].nodeValue;
grossprice=xmlDoc.getElementsByTagName("GrossPrice")[i].childNodes[0].nodeValue;
profit=xmlDoc.getElementsByTagName("Profit")[i].childNodes[0].nodeValue;
if (divText==="")
{
divText="<h1>The contact details are:</h1><br /><table border=1>";
divText+="<tr><th>Date</th><th>Product</th><th>Quantity</th><th>Gross Price</th><th>Profit</th></tr>";
}
divText += "<tr><td>" + date + "</td><td>" + product + "</td><td>" + quantity + "</td><td>" + grossprice + "</td><td>" + profit + "</td>"+"</tr>";
}
}
if (divText=="")
{
divText = "<h2>The product does not exist.</h2>";
}
else
{
divText+="</table>";
}
document.getElementById("results").innerHTML= divText;
}
</script>
</body>
</html>
希望有所幫助,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.