2011-08-29 14 views
33

¿Cómo analizo XML y cómo puedo navegar el resultado usando jQuery? Aquí está mi XML de ejemplo:Cómo analizar XML utilizando jQuery?

<Pages> 
    <Page Name="test"> 
    <controls> 
     <test>this is a test.</test> 
    </controls> 
    </Page> 
    <Page Name = "User"> 
    <controls> 
     <name>Sunil</name> 
    </controls> 
    </Page> 
</Pages> 

Me gustaría encontrar el nodo por este camino Pages ->Page Name ->controls ->test?

+2

¿Qué quiere decir con * cómo puedo encontrar los detalles de un nodo usando esta jerarquía Pages-> pagename-> controls-> test *? Por favor aclara También tenga en cuenta que 'Página! == página'. –

Respuesta

34

No es la función de este $.parseXML: http://api.jquery.com/jQuery.parseXML/

Usted puede utilizar de esta manera:

var xml = $.parseXML(yourfile.xml), 
    $xml = $(xml), 
    $test = $xml.find('test'); 

console.log($test.text()); 

Si realmente quiere un objeto, se necesita un plugin para eso. Este complemento, por ejemplo, convertirá su XML a JSON: http://www.fyneworks.com/jquery/xml-to-json/

+2

Gosh ... La pregunta era "¿cómo puedo encontrar los detalles de un nodo usando esta jerarquía Pages-> pagename-> controls-> test ? " no "¿Cómo puedo analizar el archivo XML? ¿Tengo razón o estoy en lo cierto? – WTK

+0

No es posible sin complementos, ver mi edición. ** Editar ** Ah, usted no fue quien hizo la pregunta. Tienes razón, por supuesto, pero eso no significa que no podamos hacer otras sugerencias. – Luwe

+0

Claro que podemos. BTW buen enlace sobre el plugin xml-to-json. – WTK

2

Tenga una mirada en .parseXML()[docs] de jQuery:

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

var $test = $xml.find('Page[Name="test"] > controls > test'); 
14

puede utilizar .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()); 
    }); 

aquí es el violín http://jsfiddle.net/R37mC/1/

+4

Nota: deseará agregar barras diagonales inversas al final de las líneas XML o el intérprete de Javascript no lo aceptará como una cadena. –

+0

@Jens Roland yup pero en el violín quité los espacios en blanco, y TNX para la información – Rafay

10

Supongo que está cargando el XML desde un archivo externo. Con $.ajax(), es bastante simple en realidad:

$.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'); 
    } 
}); 

Además, debe ser coherente acerca de la denominación nodo XML. Tiene nombres de nodos en minúsculas y en mayúscula (<Page> versus <page>) que pueden ser confusos cuando intenta usar selectores de árbol XML.

9
$xml = $($.parseXML(xml)); 

$xml.find("<<your_xml_tag_name>>").each(function(index,elem){ 
    // elem = found XML element 
}); 
+0

esta solución es realmente buena, ¿podría mejorarla con un código completo? Muchas gracias! +1 –

1

Fui el camino de jQuery de .parseXML() sin embargo se encontró que la sintaxis XML ruta de 'Page[Name="test"] > controls > test' no funcionaría (si alguien sabe por qué gritar por favor!).

En lugar de eso encadenados juntos los resultados individuales .find() en algo parecido a esto:

$xmlDoc.find('Page[Name="test"]') 
     .find('contols') 
     .find('test') 

El resultado logra lo mismo que lo que se esperaría encontrar el tiro.

Cuestiones relacionadas