Je me demande s'il est possible de créer un fichier XML avec des données en Javascript. J'ai les données stockées dans des variables.
J'ai googlé un peu et il ne semble pas que l'on en parle beaucoup. Je pensais pouvoir utiliser XMLWriter
comme ceci:
var XML = new XMLWriter();
XML.BeginNode ("testing");
XML.Node("testingOne");
XML.Node("TestingTwo");
XML.Node("TestingThree");
XML.EndNode();
comme indiqué dans ce tutoriel: EHow Tutorial
Cependant, quand j'exécute ce code, j'obtiens l'erreur suivante:
ReferenceError: XMLWriter is not defined
Des idées sur la façon dont je peux commencer avec ça?
Merci d'avance!
Avertissement: La réponse suivante suppose que vous utilisez l'environnement JavaScript d'un navigateur Web.
JavaScript gère XML avec des "objets DOM XML". Vous pouvez obtenir un tel objet de trois manières:
1. Création d'un nouvel objet DOM XML
var xmlDoc = document.implementation.createDocument(null, "books");
Le premier argument peut contenir l'URI de l'espace de noms du document à créer, si le document en appartient à un.
Source: https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument
2. Récupérer un fichier XML avec 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. Analyse d'une chaîne contenant du code XML sérialisé
var xmlString = "<root></root>";
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
Lorsque vous avez obtenu un objet XML DOM, vous pouvez utiliser des méthodes pour le manipuler comme
var node = xmlDoc.createElement("heyHo");
var elements = xmlDoc.getElementsByTagName("root");
elements[0].appendChild(node);
Pour une référence complète, voir http://www.w3schools.com/xml/dom_intro.asp
Remarque: Il est important que vous n'utilisiez pas les méthodes fournies par l'espace de nom de document, i. e.
var node = document.createElement("Item");
Cela créera des nœuds HTML au lieu de nœuds XML et donnera un nœud avec des noms de balises minuscules. Les noms de balises XML sont sensibles à la casse contrairement aux noms de balises HTML.
Vous pouvez sérialiser des objets XML DOM comme ceci:
var serializer = new XMLSerializer();
var xmlString = serializer.serializeToString(xmlDoc);
Considérez que nous devons créer le document XML suivant:
<?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>
nous pouvons écrire le code suivant pour générer le XML ci-dessus
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 du texte doit être écrit entre une balise, nous pouvons utiliser la propriété innerHTML pour l'obtenir.
Exemple
elem = doc.createElement("Gender")
elem.innerHTML = "Male"
parent_elem.appendChild(elem)
Pour plus de détails, veuillez suivre le lien ci-dessous. L'exemple ci-dessus a été expliqué plus en détail.
https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/How_to_create_a_DOM_tree
ce travail pour moi ..
var xml = parser.parseFromString('<?xml version="1.0" encoding="utf-8"?><root></root>', "application/xml");
Simplement utiliser
var xmlString = '<?xml version="1.0" ?><root />';
var xml = jQuery.parseXML(xml);
C'est jQuery.parseXML , vous n'avez donc pas à vous soucier des astuces concernant plusieurs navigateurs. Utilisez jQuery comme HTML, il utilise le moteur XML natif.
Ne fonctionne que dans 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);
});
Ensuite, appuyez sur xmlDoc.xml dans votre code Java.
Votre code fait référence cette bibliothèque
Vous pouvez l'inclure et votre code en question devrait alors fonctionner tel quel. Si vous souhaitez le faire sans ajouter de préfixe à la bibliothèque et ne le construire qu'avec des fonctions intégrées, suivez la réponse de @ Seb3736.
Dans un exemple de navigateur
<html>
<head>
<script src="Global.js" language="javascript"></script>
<script src="XMLWriter.js" language="javascript"></script>
<script language="javascript" type="text/javascript">
function genXML(){
var XML = new XMLWriter();
XML.BeginNode ("testing");
XML.Node("testingOne");
XML.Node("TestingTwo");
XML.Node("TestingThree");
XML.EndNode();
//Do something... eg.
console.log(XML.ToString); //Yes ToString() not toString()
}
</script>
</head>
<body>
<input type="submit" value="genXML" onclick="genXML();">
</body>
</html>
xml-writer (paquet npm) Je pense que c'est le bon moyen de créer et d'écrire un fichier xml facilement. En outre, il peut être utilisé côté serveur avec nodejs.
var XMLWriter = require('xml-writer');
xw = new XMLWriter;
xw.startDocument();
xw.startElement('root');
xw.writeAttribute('foo', 'value');
xw.text('Some content');
xw.endDocument();
console.log(xw.toString());