javascript如何访问一个多记录的XML文档
javascript如何访问一个多记录的XML文档,同时一条记录有多个字段内容.
就像一张表有多行,每行有多个字段一样,XML文档内容会是什么样的,如果用JS读取,希望能给我帮助谢谢!
多行的记录是可变的,因为这部分我要在服务端生成
[解决办法]
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<title> 创建表格(数据从xml文件中读取) </title>
<script language= "javascript ">
function loadXML(handler)
{
var url = "../xml/employees.xml ";
if(document.implementation && document.implementation.createDocument)
{
var xmldoc = document.implementation.createDocument( " ", " ", null);
xmldoc.onload = handler(xmldoc, url);
xmldoc.load(url);
}
else if(window.ActiveXObject)
{
var xmldoc = new ActiveXObject( "Microsoft.XMLDOM ");
xmldoc.onreadystatechange = function()
{
if(xmldoc.readyState == 4) handler(xmldoc, url);
}
xmldoc.load(url);
}
}
function makeTable(xmldoc, url)
{
var table = document.createElement( "table ");
table.setAttribute( "border ", "1 ");
table.setAttribute( "cellSpacing ", "1 ");
table.setAttribute( "width ", "600 ");
table.setAttribute( "class ", "tab-content ");
document.body.appendChild(table);
var caption = "Employee Data from " + url;
table.createCaption().appendChild(document.createTextNode(caption));
var header = table.createTHead();
var headerrow = header.insertRow(0);
headerrow.insertCell(0).appendChild(document.createTextNode( "姓名 "));
headerrow.insertCell(1).appendChild(document.createTextNode( "职业 "));
headerrow.insertCell(2).appendChild(document.createTextNode( "工资 "));
var employees = xmldoc.getElementsByTagName( "employee ");
for(var i=0;i <employees.length;i++)
{
var e = employees[i];
var name = e.getAttribute( "name ");
var job = e.getElementsByTagName( "job ")[0].firstChild.data;
var salary = e.getElementsByTagName( "salary ")[0].firstChild.data;
var row = table.insertRow(i+1);
row.insertCell(0).appendChild(document.createTextNode(name));
row.insertCell(1).appendChild(document.createTextNode(job));
row.insertCell(2).appendChild(document.createTextNode(salary));
}
}
</script>
<link href= "css/style.css " rel= "stylesheet " type= "text/css ">
</head>
<body onLoad= "loadXML(makeTable) ">
</body>
</html>
employees.xml
<?xml version= "1.0 " encoding= "gb2312 "?>
<employees>
<employee name= "J.Doe ">
<job> Programmer </job>
<salary> 32768 </salary>
</employee>
<employee name= "A.Baker ">
<job> Sales </job>
<salary> 70000 </salary>
</employee>
<employee name= "Big Cheese ">
<job> CEO </job>
<salary> 100000 </salary>
</employee>
</employees>
[解决办法]
<html>
<head>
<script language= "javascript ">
var i = -1;
var orderDoc = new ActiveXObject( "MSXML2.DOMDocument.3.0 ");
orderDoc.load( "1.xml ");
var items = orderDoc.selectNodes( "/Order/Item ");
//alert(orderDoc.selectNodes( "/Order/Item[@name= '22 '] "));
function getNode(doc, xpath) {
var retval = " ";
var value = doc.selectSingleNode(xpath);
if (value) retval = value.text;
return retval;
}
function getDataNext() {
i++;
if (i > items.length - 1) i = 0;
document.forms[0].SKU.value = getNode(orderDoc, "/Order/Item[ " +
i + "]/SKU ");
document.forms[0].Price.value = getNode(orderDoc, "/Order/Item[ "
+ i + "]/PricePer ");
document.forms[0].Quantity.value = getNode(orderDoc,
"/Order/Item[ " + i + "]/Quantity ");
document.forms[0].Total.value = getNode(orderDoc, "/Order/Item[ "
+ i + "]/Subtotal ");
document.forms[0].Description.value = getNode(orderDoc,
"/Order/Item[ " + i + "]/Description ");
}
function getDataPrev() {
i--;
if (i < 0) i = items.length - 1;
document.forms[0].SKU.value = getNode(orderDoc, "/Order/Item[ " +
i + "]/SKU ");
document.forms[0].Price.value = getNode(orderDoc, "/Order/Item[ "
+ i + "]/PricePer ");
document.forms[0].Quantity.value = getNode(orderDoc,
"/Order/Item[ " + i + "]/Quantity ");
document.forms[0].Total.value = getNode(orderDoc, "/Order/Item[ "
+ i + "]/Subtotal ");
document.forms[0].Description.value = getNode(orderDoc,
"/Order/Item[ " + i + "]/Description ");
}
</script>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 "> </head>
<body onload= "getDataNext() ">
<h2> XML Order Database </h2>
<form>
<table border= "0 ">
<tr> <td> SKU </td> <td> <input type= "text " name= "SKU "> </td> </tr>
<tr> <td> Price </td> <td> <input type= "text " name= "Price "> </td> </tr>
<tr> <td> Quantity </td> <td> <input type= "text "
name= "Quantity "> </td> </tr>
<tr> <td> Total </td> <td> <input type= "text " name= "Total "> </td> </tr>
<tr> <td> Description </td> <td> <input type= "text "
name= "Description "> </td> </tr>
</table>
<input type= "button " value= " < < " onClick= "getDataPrev(); "> <input
type= "button " value= " > > " onClick= "getDataNext(); ">
</form>
</body>
</html>
这是 1.xml
<?xml version= "1.0 " ?>
<Order>
<Account> 9900234 </Account>
<Item id= "1 ">
<SKU> 1234 </SKU>
<PricePer> 5.95 </PricePer>
<Quantity> 100 </Quantity>
<Subtotal> 595.00 </Subtotal>
<Description> Super Widget Clamp </Description>
</Item>
<Item id= "2 " name= "22 ">
<SKU> 6234 </SKU>
<PricePer> 22.00 </PricePer>
<Quantity> 10 </Quantity>
<Subtotal> 220.00 </Subtotal>
<Description> Mighty Foobar Flange </Description>
</Item>
<Item id= "3 ">
<SKU> 9982 </SKU>
<PricePer> 2.50 </PricePer>
<Quantity> 1000 </Quantity>
<Subtotal> 2500.00 </Subtotal>
<Description> Deluxe Doohickie </Description>
</Item>
<Item id= "4 ">
<SKU> 3256 </SKU>
<PricePer> 389.00 </PricePer>
<Quantity> 1 </Quantity>
<Subtotal> 389.00 </Subtotal>
<Description> Muckalucket Bucket </Description>
</Item>
<NumberItems> 1111 </NumberItems>
<Total> 3704.00 </Total>
<OrderDate> 07/07/2002 </OrderDate>
<OrderNumber> 8876 </OrderNumber>
</Order>