2017-08-11 59 views
2

我有一個var與底部顯示的內容。這個想法是遍歷這個var,並獲得<module>和標籤之間的內容並將其插入array varJavascript中的迭代/循環相同的標記XML?

<module> 
    <title>Tag1</title> 
    <multipleChoice> 
     <option>option 1</option> 
    </multipleChoice> 
</module> 
<module> 
    <title>Tag2</title> 
    <multipleChoice> 
     <option>option 1</option> 
     <option>option 2</option> 
    </multipleChoice> 
</module> 
<module> 
    <title>Tag4</title> 
    <multipleChoice> 
     <option>option 1</option> 
     <option>option 2</option> 
    </multipleChoice> 
</module> 

所以這array var會在[0]位置等,以節省:

<module> 
    <title>Tag1</title> 
    <multipleChoice> 
     <option>option 1</option> 
    </multipleChoice> 
</module> 

我已經試過到目前爲止越來越各module tag以這種方式,並插入到各陣列位置。我已閱讀xmlDoc Parser,但不確定這是否是最佳方法。

//Get module section xml 
var array = []; 
var startPos = str.indexOf("<module>"); 
var endPos = str.indexOf("</module>"); 
var xmlModule = str.substring(startPos,endPos).trim(); 

array[0] = xmlModule; 

回答

3

您可以使用DOMParser字符串解析爲一個有效的DOM元素

  1. 創建root爲使其可解析的元素(任何與此有關的名稱)。

  2. 循環遍歷模塊並根據需要獲取數組。

請參見下面的演示:

var parser = new DOMParser(); 
 
var xml = `<root> 
 
<module> 
 
    <title>Tag1</title> 
 
    <multipleChoice> 
 
     <option>option 1</option> 
 
    </multipleChoice> 
 
</module> 
 
<module> 
 
    <title>Tag2</title> 
 
    <multipleChoice> 
 
     <option>option 1</option> 
 
     <option>option 2</option> 
 
    </multipleChoice> 
 
</module> 
 
<module> 
 
    <title>Tag4</title> 
 
    <multipleChoice> 
 
     <option>option 1</option> 
 
     <option>option 2</option> 
 
    </multipleChoice> 
 
</module> 
 
</root>`; 
 
var xmlDoc = parser.parseFromString(xml,"text/xml"); 
 

 
var result = Array.prototype.map.call(
 
xmlDoc.querySelectorAll('module'), function(e){ 
 
    return e.outerHTML.replace(/\s/g, ''); 
 
}); 
 

 
console.log(result);

+2

夠簡單了!謝謝。 –