Pregunta Crear XML en Javascript


Me pregunto, ¿es posible crear un archivo XML con algunos datos en Javascript? Tengo los datos almacenados en variables.

He buscado en Google un poco y no parece que haya hablado mucho. Pensé que podría usar XMLWriter como esto:

var XML = new XMLWriter();
XML.BeginNode ("testing");
XML.Node("testingOne");
XML.Node("TestingTwo");
XML.Node("TestingThree");
XML.EndNode();

como se indica en este tutorial:Tutorial de EHow

Sin embargo, cuando ejecuto este código recibo el siguiente error:

ReferenceError: XMLWriter is not defined

¿Alguna idea sobre cómo puedo comenzar con esto?

¡Gracias por adelantado!


26
2018-01-15 15:21


origen


Respuestas:


Descargo de responsabilidad: La siguiente respuesta asume que está utilizando el entorno JavaScript de un navegador web.

JavaScript maneja XML con 'XML DOM objects'. Puede obtener dicho objeto de tres maneras:

1. Crear un nuevo objeto XML DOM

var xmlDoc = document.implementation.createDocument(null, "books");

El primer argumento puede contener el URI del espacio de nombres del documento que se creará, si el documento pertenece a uno.

Fuente: https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument

2. Obtener un archivo XML con XMLHttpRequest

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {

    var xmlDoc = xhttp.responseXML; //important to use responseXML here
}
xhttp.open("GET", "books.xml", true);
xhttp.send();

3. Analizando una cadena que contiene XML serializado

var xmlString = "<root></root>";
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"

Cuando haya obtenido un objeto XML DOM, puede usar métodos para manipularlo como

var node = xmlDoc.createElement("heyHo");
var elements = xmlDoc.getElementsByTagName("root");
elements[0].appendChild(node);

Para una referencia completa, vea http://www.w3schools.com/xml/dom_intro.asp

Nota: Es importante que no utilice los métodos provistos por el espacio de nombres del documento, i. mi.

var node = document.createElement("Item");

Esto creará nodos HTML en lugar de nodos XML y dará como resultado un nodo con nombres de etiquetas en minúsculas. Los nombres de etiquetas XML distinguen entre mayúsculas y minúsculas en contraste con los nombres de etiquetas HTML.

Puede serializar objetos XML DOM como este:

var serializer = new XMLSerializer();
var xmlString = serializer.serializeToString(xmlDoc);

39
2017-12-02 15:53



este trabajo para mí ...

var xml  = parser.parseFromString('<?xml version="1.0" encoding="utf-8"?><root></root>', "application/xml");

developer.mozilla.org/en-US/docs/Web/API/DOMParser


3
2018-01-14 06:53



Solo funciona en IE

 $(function(){

        var xml = '<?xml version="1.0"?><foo><bar>bar</bar></foo>'; 

        var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(xml);

        alert(xmlDoc.xml);

    });

Luego, inserta xmlDoc.xml en tu código java.


2
2018-01-15 16:04



Simplemente usa

var xmlString = '<?xml version="1.0" ?><root />';
var xml = jQuery.parseXML(xml);

Sus jQuery.parseXML, así que no hay necesidad de preocuparse por los trucos entre navegadores. Use jQuery como HTML, está usando el motor XML nativo.


2
2018-01-15 16:53



Considere que debemos crear el siguiente documento XML:

<?xml version="1.0"?>
<people>
  <person first-name="eric" middle-initial="H" last-name="jung">
    <address street="321 south st" city="denver" state="co" country="usa"/>
    <address street="123 main st" city="arlington" state="ma" country="usa"/>
  </person>

  <person first-name="jed" last-name="brown">
    <address street="321 north st" city="atlanta" state="ga" country="usa"/>
    <address street="123 west st" city="seattle" state="wa" country="usa"/>
    <address street="321 south avenue" city="denver" state="co" country="usa"/>
  </person>
</people>

podemos escribir el siguiente código para generar el XML anterior

var doc = document.implementation.createDocument("", "", null);
var peopleElem = doc.createElement("people");

var personElem1 = doc.createElement("person");
personElem1.setAttribute("first-name", "eric");
personElem1.setAttribute("middle-initial", "h");
personElem1.setAttribute("last-name", "jung");

var addressElem1 = doc.createElement("address");
addressElem1.setAttribute("street", "321 south st");
addressElem1.setAttribute("city", "denver");
addressElem1.setAttribute("state", "co");
addressElem1.setAttribute("country", "usa");
personElem1.appendChild(addressElem1);

var addressElem2 = doc.createElement("address");
addressElem2.setAttribute("street", "123 main st");
addressElem2.setAttribute("city", "arlington");
addressElem2.setAttribute("state", "ma");
addressElem2.setAttribute("country", "usa");
personElem1.appendChild(addressElem2);

var personElem2 = doc.createElement("person");
personElem2.setAttribute("first-name", "jed");
personElem2.setAttribute("last-name", "brown");

var addressElem3 = doc.createElement("address");
addressElem3.setAttribute("street", "321 north st");
addressElem3.setAttribute("city", "atlanta");
addressElem3.setAttribute("state", "ga");
addressElem3.setAttribute("country", "usa");
personElem2.appendChild(addressElem3);

var addressElem4 = doc.createElement("address");
addressElem4.setAttribute("street", "123 west st");
addressElem4.setAttribute("city", "seattle");
addressElem4.setAttribute("state", "wa");
addressElem4.setAttribute("country", "usa");
personElem2.appendChild(addressElem4);

var addressElem5 = doc.createElement("address");
addressElem5.setAttribute("street", "321 south avenue");
addressElem5.setAttribute("city", "denver");
addressElem5.setAttribute("state", "co");
addressElem5.setAttribute("country", "usa");
personElem2.appendChild(addressElem5);

peopleElem.appendChild(personElem1);
peopleElem.appendChild(personElem2);
doc.appendChild(peopleElem);

Si es necesario escribir un texto entre una etiqueta, podemos usar la propiedad innerHTML para lograrlo.

Ejemplo

elem = doc.createElement("Gender")
elem.innerHTML = "Male"
parent_elem.appendChild(elem)

Para obtener más detalles, siga el enlace a continuación. El ejemplo anterior ha sido explicado allí en más detalles.

https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/How_to_create_a_DOM_tree


1
2017-07-22 11:49