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>

上記のコードは、come テーブルを作成し (簡単にするために <thead> を使用しません)、<Record> 名、AC_CPR、および各行/列の値を取得します。簡単に展開して、より多くの情報を取得できます。

于 2013-03-05T07:48:28.963 に答える