2012-03-27 15 views
20

Quiero convertir un elemento XML como esto:Convertir XML para cuerdas y anexar a la página

<asin>​B0013FRNKG​</asin>​ 

de cadena en javascript

que utilizan XMLSerializer:

new XMLSerializer().serializeToString(xml); 

la cadena única muestra en alerta() y en la consola. En la página simplemente dice

[object Element][object Element] 

Quiero obtener la cadena.

+0

qué quiere conseguir ' " B0013FRNKG "' o '" B0013FRNKG"'? – Anurag

+0

Prefiero solo "B0013FRNKG" – rzcl

Respuesta

30

No nos han dicho cómo haces para mostrar ese objeto. XMLSerializer funciona en nodos DOM, por lo que su objeto tiene que ser añadido en algún lugar, por ejemplo:

document.getElementById('SomeDiv').appendChild(xml); 

y si lo que desea es la cadena XML completo que se mostrará:

var xmlText = new XMLSerializer().serializeToString(xml); 
var xmlTextNode = document.createTextNode(xmlText); 
var parentDiv = document.getElementById('SomeDiv'); 
parentDiv.appendChild(xmlTextNode); 
+0

Esto funcionó! Gracias. No sabía sobre la parte 'createTextNode'. Pensé que XML podría usarse como JSON. – rzcl

2

¿Usted intentó encerrar el resultado como en ...

(new XMLSerializer()).serializeToString(xml) 

también, que haría uso de consola, en lugar de ver mejor el contenido:

console.log((new XMLSerializer()).serializeToString(xml)); 
4
function getXmlString(xml) { 
    if (window.ActiveXObject) { return xml.xml; } 
    return new XMLSerializer().serializeToString(xml); 
} 
alert(getXmlString(xml)); 
0

Si el elemento DOM <asin>​B0013FRNKG​</asin>​ se almacena en el objeto element, entonces se puede acceder al valor usando:

element.textContent 
4
<script type='text/javascript'> 

    function xmlToString(xmlData) { 

     var xmlString; 
     //IE 
     if (window.ActiveXObject){ 
      xmlString = xmlData.xml; 
     } 
     // code for Mozilla, Firefox, Opera, etc. 
     else{ 
      xmlString = (new XMLSerializer()).serializeToString(xmlData); 
     } 
     return xmlString; 
    } 

</script>  

utilice esto en caso de IE para problemas de compatibilidad del navegador.

+0

He estado utilizando exactamente este código por un tiempo, pero me he encontrado con un cliente que ejecuta IE10 en Win7. Tienen "use natvie XMLHTTP" marcado en Opciones de Internet (no es lo que es relevante en este caso). Sin embargo, "window.ActiveXObject" se evalúa con la verdad, pero xmlData.xml devuelve * undefined *. ¿Alguna idea de por qué? –

0

seguir esta opción para imprimir, añadir datos a partir de datos XML almacenados como cadena dentro javscript

txt="<papers>"+"<paper>"+ 
"<author>athor name</author>"+ 
"<title>title</title>"+ 
"<path>path</path>"+ 
"<track>which tack</track>"+ 
"</paper>"+ 
"<paper>"+ 
"<author>athor name</author>"+ 
"<title>title</title>"+ 
"<path>path</path>"+ 
"<track>which tack</track>"+ 
"</paper>"+ 
"<paper>"+ 
"<author>athor name</author>"+ 
"<title>title</title>"+ 
"<path>path</path>"+ 
"<track>which tack</track>"+ 
"</paper>"+ 
"<papers>"; 
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); 
    } 

x=xmlDoc.getElementsByTagName("paper"); 
for (var i = 0; i < x.length; i++) { 
    var athor =x[i].childNodes[0].firstChild.nodeValue; 
    var title = x[i].childNodes[1].firstChild.nodeValue; 
    var path = x[i].childNodes[2].firstChild.nodeValue; 
    var tack =x[i].childNodes[3].firstChild.nodeValue; 
    //do something with these values... 
    //each iteration gives one paper details  
    var xml=document.getElementById("element_id");//<div id="element_id"></div> 
    var li = document.createElement("br");// create a new <br> 
    newlink = document.createElement('A'); // creating an <a> element 
    newlink.innerHTML = athor;// adding <a>athor value here</a> 
    newlink.setAttribute('href', path);// <a href="path"></a> 

    newlink.appendChild(li);// <a href="path">athor</a><br> 
    document.getElementById("element_id").appendChild(newlink);//finaly it becomes <div id="element_id"><a href="path">athor</a><br></div> 


}