Como processar XML usando jQuery?
como analiso o XML, e como posso navegar pelo resultado usando o jQuery? Aqui está a minha amostra XML:
<Pages>
<Page Name="test">
<controls>
<test>this is a test.</test>
</controls>
</Page>
<Page Name = "User">
<controls>
<name>Sunil</name>
</controls>
</Page>
</Pages>
Eu gostaria de encontrar o nó por este caminho Pages
-> Page Name
-> controls
-> test
?
7 answers
Existe a função $.parseXML
para isto: http://api.jquery.com/jQuery.parseXML/
Podes usá - lo assim:
var xml = $.parseXML(yourfile.xml),
$xml = $( xml ),
$test = $xml.find('test');
console.log($test.text());
Se você realmente quer um objeto, você precisa de um plugin para isso. Este 'plugin', por exemplo, irá converter o seu XML para JSON: http://www.fyneworks.com/jquery/xml-to-json/
Pode usar .parseXML
var xml='<Pages>
<Page Name="test">
<controls>
<test>this is a test.</test>
</controls>
</Page>
<page Name = "User">
<controls>
<name>Sunil</name>
</controls>
</page>
</Pages>';
Jquery
xmlDoc = $.parseXML( xml ),
$xml = $( xmlDoc );
$($xml).each(function(){
alert($(this).find("Page[Name]>controls>name").text());
});
Aqui está o violino. http://jsfiddle.net/R37mC/1/
Presumo que estejas a carregar o XML de um ficheiro externo. Com $.ajax()
, na verdade, é muito simples.
$.ajax({
url: 'xmlfile.xml',
dataType: 'xml',
success: function(data){
// Extract relevant data from XML
var xml_node = $('Pages',data);
console.log( xml_node.find('Page[Name="test"] > controls > test').text() );
},
error: function(data){
console.log('Error loading XML data');
}
});
Além disso, você deve ser consistente com a nomenclatura do nó XML. Você tem nomes de nós minúsculos e capitalizados (<Page>
versus <page>
) que podem ser confusos quando você tenta usar selectores de árvore XML.
$xml = $( $.parseXML( xml ) );
$xml.find("<<your_xml_tag_name>>").each(function(index,elem){
// elem = found XML element
});
.parseXML()
[ docs]:
var $xml = $(jQuery.parseXML(xml));
var $test = $xml.find('Page[Name="test"] > controls > test');
.parseXML()
no entanto, descobriu que a sintaxe do caminho XML de 'Page[Name="test"] > controls > test'
não funcionaria (se alguém sabe por que gritar por favor!).
Em vez disso, acorrentei o indivíduo em algo parecido com isto.
$xmlDoc.find('Page[Name="test"]')
.find('contols')
.find('test')
O resultado alcança o mesmo que eu esperaria que o único tiro encontrasse.
A primeira coisa que aparece nos resultados do google http://think2loud.com/224-reading-xml-with-jquery/ Não existe uma forma simples de aceder à estrutura xml (como descreveu páginas->pagename->controlos->test) no jQuery sem quaisquer 'plugins'.