2017-01-30 118 views
0

我想從XML文檔中獲取多個標籤。我查看了this question,它基本上獲得了一個標籤的子元素,而我想要所有的標籤。使用同一示例XML(下面複製):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 = $.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 

但是,這看起來不正確。有沒有一個正確的(和更有效的)方式來做到這一點?我認爲.each函數與它有關,但並不真正瞭解如何使用它。

+0

是否只有一個'指令'和多重'選項'? –

+0

不一定。事實上,大多數時候,我不需要走下一個關卡。 – Chiwda

+0

我很擔心「說明」的數量,因爲在我的答案中,我認爲只會有一個。如果它可能更多,那麼你應該爲它們製作一個數組,就像'選項'一樣。 –

回答

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

如果需要(可以VBE轉換在jquery的陣列/對象)的整個數據爲JSON可以使用:xml2json