用子子节点解析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是无效的:

  1. 一些<列>标签与<Columna>结束。
  2. <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和各行/列值。您可以轻松扩展它以检索更多信息。

+0

你好,我正在处理你提交的xlst代码,它工作的很好! – 2013-03-05 13:17:48

+0

你知道吗我可以用ajaxslt加载外部xml吗? – 2013-03-05 16:03:32

+0

您可以在[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