用子子节点解析xml
问题描述:
早上好。用子子节点解析xml
我有下一个XML子文件与子子,我想阅读他们填充到表中的数据。现在,我知道如何以一种简单的方式做到这一点,与childnodes,但我真的不知道如何实现它获得子子节点。
<Result>
<Record id="000231">
<AC_NPD/>
<Name>Company1</Name>
<AC_CPR>00003</AC_CPR>
<AC_ALM>00</AC_ALM>
<AC_FEC>12/01/2007</AC_FEC>
<AC_LNA ncols="6">
<Row>
<Column>000084</Column>
<Column>1.230</Column>
<Column/>
<Column/>
<Column/>
<Column/>
</Row>
</AC_LNA>
<AC_FSE>12/01/2007</AC_FSE>
<AC_AV/>
<AC_UFH ncols="3"/>
</Record>
</Result>
现在,我画表的结果,使用这个脚本:
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","xml/pruebas/resp2.asp",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.write("<table class='table table-striped table-condensed table-bordered' id='example'>");
document.write("<thead>");
document.write("<tr class='odd gradeX'>");
document.write("<th>Sale</th>");
document.write("<th>Name</th>");
document.write("<th>Date</th>");
document.write("<th>Date Sale</th>");
document.write("<th>Item</th>");
document.write("<th>Quantity</th>");
document.write("<th class='hidden-phone'>Price</th>");
document.write("<th class='hidden-phone'>Total</th>");
document.write("<th>Sale Item</th>");
document.write("<th>Button</th>");
document.write("</tr>");
document.write(" </thead>");
var x=xmlDoc.getElementsByTagName("Record");
for (i=0;i<x.length;i++)
{
document.write("<tr>");
document.write("<td>"); document.write("</td>");
document.write("<td>"); document.write(x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue); document.write("</td>");
document.write("<td>"); document.write(x[i].getElementsByTagName("AC_FEC")[0].childNodes[0].nodeValue); document.write("</td>");
document.write("<td>"); document.write(x[i].getElementsByTagName("AC_FSE")[0].childNodes[0].nodeValue); document.write("</td>");
document.write("<td>"); document.write(x[i].getElementsByTagName("AC_LNA")[0].childNodes[0].nodeValue); document.write("</td>");
document.write("<td>"); document.write("</td>");
document.write("<td>"); document.write("</td>");
document.write("<td>"); document.write("</td>");
document.write("<td>"); document.write("</td>");
document.write("<td> <a data-toggle='modal' class='btn' href='sale.asp?&number="); document.write(x[i].getElementsByTagName("AC_FEC")[0].childNodes[0].nodeValue); document.write("' data-target='#myModal'> My Sale </a> "); document.write(" </td>");
document.write("</tr>");
}
document.write("</table>");
</script>
所以,如果有人知道如何让子子节点,我将非常感激。
此致敬礼。
答
首先,请注意您的XML是无效的:
- 一些<列>标签与<Columna>结束。
- <AC_LNA>标记未正确关闭。
你解决这个问题之后,我会建议,它这是在您的情况选择,通过使用XSLT表从您的演示文稿分离XML。请注意,使用XSLT不是唯一的选择,这只是我的建议。
如果你不想使用XSLT,您可以随时使用的例子子的childNodes:
var columns = x[i].getElementsByTagName('Column');
for (var ci = 0; ci < columns.length; ci++) {
// do something with columns[ci]
}
如果选择XSLT,有一个由谷歌一个好的图书馆称为AJAXSLT。您可以使用它将您从服务器获得的XML转换为HTML。
样式表是这样的(部分缓解):上述
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table>
<xsl:for-each select="Result/Record">
<tr>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="AC_CPR"/></td>
<td>
Columns:
<xsl:for-each select="AC_LNA/Row/Column[text() != '']">
<xsl:value-of select="." />,
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
代码创建来表(没有<THEAD>为了简单),并得到<记录>名,AC_CPR和各行/列值。您可以轻松扩展它以检索更多信息。
你好,我正在处理你提交的xlst代码,它工作的很好! – 2013-03-05 13:17:48
你知道吗我可以用ajaxslt加载外部xml吗? – 2013-03-05 16:03:32
您可以在[ajaxslt-0.8.1.tar.gz]中找到示例(https://code.google.com/p/ajaxslt/downloads/detail?name=ajaxslt-0.8.1.tar.gz&can=2&q= )在文件/test/xslt_script.js中。基本上,你需要调用xmlParse(string),其中'string'是你的XML文档。您可以使用[AJAX](https://developer.mozilla.org/en-US/docs/AJAX)来获取它。 – kamituel 2013-03-05 17:00:57