早上好。
我有下一个带子子的xml文件,我想读取它们以将数据填充到表中。现在,我知道如何以简单的方式使用子节点,但我真的不知道如何实现它来获取子子节点。
<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>
所以,如果有人知道如何获得子子节点,我将非常感激。
最好的问候。
答案 0 :(得分:0)
首先,请注意您的XML无效:
修复此问题后,我建议,在您的情况下,这是一个选项,使用XSLT表将XML与您的演示文稿分开。请注意,使用XSLT不是唯一的选择,这只是我的建议。
如果您不想使用XSLT,您总是可以使用示例来访问子子节点:
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>
上面的代码创建了来表(为简单起见没有&lt; thead&gt;)并获得&lt; Record&gt; name,AC_CPR和每个Row / Column值。您可以轻松扩展它以检索更多信息。