0

早上好。

我有下一个带有子子项的 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>

因此,如果有人知道如何获取子子节点,我将不胜感激。

最好的祝福。

4

1 回答 1

0

首先,请注意您的 XML 无效:

  1. 一些 <Column> 标签以 <Columna> 结尾。
  2. <AC_LNA> 标签未正确关闭。

在您解决此问题后,我会建议,这是您的一个选项,使用 XSLT 表将 XML 与您的演示文稿分开。请注意,在这里使用 XSLT 并不是唯一的选择,这只是我的建议。

如果您不想使用 XSLT,您始终可以使用以下示例访问子子节点:

var columns = x[i].getElementsByTagName('Column');
for ( var ci = 0; ci < columns.length; ci++ ) {
  // do something with columns[ci]
}

如果您确实选择了 XSLT,Google 提供了一个名为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>)并获取 <Record> 名称、AC_CPR 和每个 Row/Column 值。您可以轻松扩展它以检索更多信息。

于 2013-03-05T07:48:28.963 回答