2017-01-30 15 views
0

XML文書から複数のタグを取得したい。私はthis questionを見ました。基本的に1つのタグのサブ要素を取得しますが、すべてのタグが必要です。複数のタグに対してjquery xmlを解析する

var data = 
"<root> 
    <instructions>Some ins text.</instructions> 
    <options> 
     <option>1.png</option> 
     <option>2.png</option> 
     <option>3.png</option> 
     <option>4.png</option> 
    </options> 
    <noOfOptions>4</noOfOptions> 
</root>"; 

がどのように私は「命令」、「オプション」および「noOfOptions」の値を取得します。(以下、レプリケート)同じ例のXMLを使用していますか?

私はちょうどこのようなコード3回繰り返しでした:

xml = $.parseXML(data), 
$data = $(xml), 
$options = $data.find("option"); // get all option nodes 

xml = $.parseXML(data), 
$data = $(xml), 
$instructions = $xml.find("instructions"); // get instructions 

xml = $.parseXML(data), 
$data = $(xml), 
$noOfOptions = $xml.find("noOfOptions"); // get noOfOptions 

をしかし、それはないと思えます。これを行う正しい(そしてより効率的な)方法はありますか?それぞれの機能には関係がありますが、実際の使用方法は分かりません。あなたの構造が固定されている場合は

+0

が一つだけ '説明書です'と複数の'オプション '? –

+0

必ずしもそうではありません。実際にはほとんどの時間、私はレベルを下げる必要はありません。 – Chiwda

+0

私の答えではただ1つしかないと仮定していたので、私は「指示」の数を心配しています。それ以上あれば、 'option'sのような配列を作るべきです。 –

答えて

2

var data = 
 
"<root>\ 
 
    <instructions>Some ins text.</instructions>\ 
 
    <options>\ 
 
     <option>1.png</option>\ 
 
     <option>2.png</option>\ 
 
     <option>3.png</option>\ 
 
     <option>4.png</option>\ 
 
    </options>\ 
 
    <noOfOptions>4</noOfOptions>\ 
 
</root>"; 
 

 

 
var xml = $.parseXML(data); 
 
var $data = $(xml); 
 

 
var instructions = $data.find("instructions").text(); 
 
var options = []; 
 
$data.find("option").each(function(){ 
 
    options.push($(this).text()); 
 
}); 
 

 
console.log("instructions: " + instructions); 
 
console.log("options: ", options);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

、あなたはこれを試すことができます。

var data = 
"<root>"+ 
    "<instructions>Some ins text.</instructions>"+ 
    "<options>"+ 
     " <option>1.png</option>"+ 
     "<option>2.png</option>"+ 
     " <option>3.png</option>"+ 
     " <option>4.png</option>"+ 
    " </options>"+ 
    " <noOfOptions>4</noOfOptions>"+ 
    "<instructions>Some ins text1.</instructions>"+ 
    "<options>"+ 
    " <option>1.png</option>"+ 
     "<option>2.png</option>"+ 
    " <option>3.png</option>"+ 
    " <option>4.png</option>"+ 
    " </options>"+ 
    " <noOfOptions>4</noOfOptions>"+ 
"</root>"; 
xml = $.parseXML(data); 
var arr=[]; 
    var arr=[]; 
    $("instructions", xml).each(function (index,val) { 

     arr[index]=[]; 
     arr[index]['instructions']=$(this).text(); 
     arr[index]['option']=[]; 
     $("option",$(val).next()).each(function(){ 
      arr[index]['option'].push($(this).text()); 
     }); 
     arr[index]['noOfOptions']=[]; 
     arr[index]['noOfOptions']=$($(val).next()).next().text(); 

     }); 
    console.log(arr); 

コンソール出力を:

[配列[0]、配列[0] 0:配列を[0]手順: "一部インテキスト" 長さ: 0noOfOptions: "4" オプション:配列[4] プロト:配列[0] 1:配列[0]長さ: 2__proto__:配列[0]

Fiddle

あなたは(jqueryの配列/オブジェクトに変換VBE可能)JSONとして全体のデータが必要な場合は、使用することができます。xml2json