2016-07-20 2 views
0

так им пытаются извлечь данные из XML-файл, который выглядит следующим образом:Получить ребенок детей из XML-файла

<example> 
    <phrase>phrase1</phrase> 
    <word> 
     <definition>definition1</definition> 
    </word> 
    <word> 
     <definition>definition2</definition> 
    </word> 
</example> 

Я хочу, чтобы иметь возможность поставить definition1 и определении2, как отдельные члены массива, для Теперь я получить их сливались, как это: definition1definition2

это мой код:

var $example = $xml.find("example"); 
       $example.each(function(){     
     list.push($(this).children("word").children("definition").text()); 
       }); 

кто-нибудь есть идеи? благодаря

+0

ваш XML имеет неверный формат. Исправьте теги и задайте вопрос. – naveen

+0

извините, исправлено. –

ответ

0

проверить это Fiddle.

$(document).ready(function() { 

var xml = 
    '<example>' + 
    '<phrase>phrase1</phrase>' + 
    '<word>' + 
     '<definition>definition1</definition>' + 
    '</word>' + 
    '<word>' + 
     '<definition>definition2</definition>' + 
    '</word>' + 
    '</example>' + 
''; 
var xmlDoc = new DOMParser().parseFromString(xml, 'text/xml'); 
var x = xmlDoc.documentElement.childNodes; 
var list = []; 
for (i = 0; i < x.length; i++) { 
    if (x[i].nodeName == 'word') { 
    console.log(x[i].childNodes[0].innerHTML); 
    list.push(x[i].childNodes[0].innerHTML); 
    } 
} 
document.getElementById('demo').innerHTML = list; 
console.log(list); 
}); 
0

решение JQuery

$example.find("word > definition").map(function(){ return $(this).text()}).toArray() 

var xml = 
 
    '<example>' + 
 
    '<phrase>phrase1</phrase>' + 
 
    '<word>' + 
 
    '<definition>definition1</definition>' + 
 
    '</word>' + 
 
    '<word>' + 
 
    '<definition>definition2</definition>' + 
 
    '</word>' + 
 
    '</example>' + 
 
    ''; 
 
var xmlDoc = new DOMParser().parseFromString(xml, 'text/xml'); 
 
var list = $("example > word > definition",xmlDoc).map(function(){ return $(this).text()}).toArray(); 
 
console.log(list);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Vanila решение JS

// Code goes here 
 
var list = []; 
 
var txt = `<example> 
 
    <phrase>phrase1</phrase> 
 
    <word> 
 
     <definition>definition1</definition> 
 
    </word> 
 
    <word> 
 
     <definition>definition2</definition> 
 
    </word> 
 
</example>`; 
 
if (window.DOMParser) { 
 
    parser = new DOMParser(); 
 
    xmlDoc = parser.parseFromString(txt, "text/xml"); 
 
} else // Internet Explorer 
 
{ 
 
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
 
    xmlDoc.async = false; 
 
    xmlDoc.loadXML(txt); 
 
} 
 

 
var elements = xmlDoc.getElementsByTagName("definition"); 
 

 
[].forEach.call(elements, function(el) { 
 
    list.push(el.textContent) 
 
}); 
 
console.log(list);

1

Если вы хотите использовать JQuery, вам необходимо изменить

$example.each(function(){     
     list.push($(this).children("word").children("definition").text()); 
       }); 

в

$example.children("word").children("definition").each(
    function() {     
    list.push($(this).text()); 
    });