2012-02-22 13 views
1

こんにちは、私はXML文字列を解析しようとしています。文字列はこのように見えます。javascriptを使用してXML文字列を解析します。

   <sheetData> 
       <row r="1" spans="1:12" x14ac:dyDescent="0.25"> 
        <c r="A1"> 
        <v>1</v> 
        </c> 
        <c r="B1" t="s"> 
        <v>3</v> 
        </c> 
        <c r="C1" t="s"> 
        <v>2</v> 
        </c> 
        <c r="F1" t="s"> 
        <v>0</v> 
        </c> 
        <c r="L1" t="s"> 
        <v>1</v> 
        </c> 
       </row> 
       <row r="2" spans="1:12" x14ac:dyDescent="0.25"> 
        <c r="A2"> 
        <v>1</v> 
        </c> 
        <c r="B2" t="s"> 
        <v>4</v> 
        </c> 
       </row> 
       <row r="4" spans="1:12" x14ac:dyDescent="0.25"> 
        <c r="I4"> 
        <v>7</v> 
        </c> 
       </row> 
       </sheetData> 

私は検索と検索が、私は何を発見維持することは、私の要件を満たしていないように見えますjqueryのまたはJavaScriptを使用してファイルを読み込み、XMLにする方法ですしています。

私が作成して試したコードですが、失敗しています。

   var len = xmlDoc2.getElementsByTagName("row")[0].childNodes.length; 

        for (var i=0; i < (TotalSheetNodes*len); i++){ 


        mysheet.innerHTML +=(xmlDoc2.getElementsByTagName("c")[i].getAttribute("r")) + "</br>"; 

        var v1 = (xmlDoc2.getElementsByTagName("c")[i].getAttribute("r")); 


        /*if the element does not have an attribute of t then add it to then add it to the dictionary*/ 
        if (xmlDoc2.getElementsByTagName("c")[i].getAttribute("t") == null) 
        { 
         var v2 = xmlDoc2.getElementsByTagName("v")[i].childNodes[0].nodeValue 

          Jcell.Dictionary[v1]= v2 

        } 
        //else addid to the sheet element so we can extract the value later from shared string. 
        else{ 
        Jcell.Sheet[(v1)] = v1; 

        } 

この行のために失敗しました。

   var len = xmlDoc2.getElementsByTagName("row")[0].childNodes.length; 

ここで私の基本的な質問は "行"の下にすべての子ノードを取得する最も簡単な方法は何ですか?さらに、子ノードに "T"という属性がある場合は、 という値を別のオブジェクト変数に割り当てたいと思っています。 あなたの応答は非常に高く評価されるでしょう。 私は本当に古いJavaScriptでこれをやりたいと思っています。

+0

でしょうか?私は、javascriptでxml parseに関するalmos半ダースの質問を見ることができます。 – jap1968

+0

私は私の質問に述べたように私は見て見ましたが、私はちょうど傾けることができないので、私は投稿している理由を動作させる。読んでいるXMLファイルとXMLストリングを読むことはまったく異なる概念です。あなたのコメントをありがとう。 – Miguel

+0

あなたの問題は「XMLを解析する方法」ではないように思われるので、質問の名前を変更してください – Bergi

答えて

1

xmlDoc2.getElementsByTagName("row")に少なくとも1つの結果がありますか?そうでなければ、構文はうまくいくようです。

また、あなたのスクリプトスニペットには多くの初期設定がありません。そのスクリプトのスニペットがなければ、お手伝いできません。

  • xmlDoc2 - (?またはエラーメッセージ)、これは十分に解析されたXMLドキュメントオブジェクトである
  • TotalSheetNodesは何ですか?
  • mysheetはHTML要素のようですか?
  • JCellとは何ですか?それは質問に関連していないようです。

EDIT:

横断する(正しい言葉ではなく、 "パース" のようです)、あなたのXMLドキュメントあなたがすべきループ独自にそれぞれのNodeListて。可能な限り、すべての要素は、あなたが信じているように、XMLドキュメントオブジェクトだけでなく、Nodeインターフェイスを継承します。

さらに、cにのみ興味があるので、rowを数える必要はありません。大きな間違いは、最初の行にあるc要素の数をマルチプルにすることによって、(全体の)文書内のcの数の近似であるように見えます。xmlソースはこれが間違っていることを証明します。

var rows = xmlDoc2.getElementsByTagName("row"); 
for (var i=0, l=rows.length; i<l; i++) { 
    var row = rows[i]; 
    var cs = row.getElementsByTagName("c"); 
    for (var j=0, m=cs.length; j<m; j++) { 
     var c = cs[j]; 
     var t = c.getAttribute("t"); 
     var v = c.getElementsByTagName("v")[0]; // throws an error if there is no "v" 

     // do whatever you want with row, c, t and v 
    } 
} 

上記のあなたの例ではrowを使用していないとして、あなただけの外側のループを省略するかもしれないし、関連する質問を見ていました

var cs = xmlDoc2.getElementsByTagName("c"); 
+0

xmlDoc2.getElementsByTagName( "row")これは絶対に値を持ちます。私の問題は、親要素に遭遇したときに、行の下にある子を読みたいということです。 "var len = xmlDoc2.getElementsByTagName(" row ")[0] .childNodes.length"を実行する必要はないはずです。私は、親ノードを識別し、子ノードをループするより良い方法があると思います。シートノードの合計は、xmlファイル内の行ノードの合計です。私はちょうどコードのトンで誰も圧倒しないようにここにスニペットを置くだろうが。 – Miguel

+0

OK。だから、そのエラーはその行をスローしますか? – Bergi

+0

"TypeError:xmlDoc2.getElementsByTagName(" c ")[i]は定義されていません"これは私が得るエラーです。 – Miguel

関連する問題