Создание XML в Javascript

Вопрос:Мне интересно, возможно ли создать XML файл с некоторыми данными в Javascript? У меня есть данные, хранящиеся в переменных. Я немного искал Google, и похоже, что он много говорил. Я думал, что могу использовать XMLWriter, например: var XML = new XMLWriter(); XML.BeginNode ("testing"); XML.Node("testingOne"); XML.Node("TestingTwo"); XML.Node("TestingThree"); XML.EndNode(); как указано в этом уроке: Учебник EHow Однако,

Вопрос:

Мне интересно, возможно ли создать XML файл с некоторыми данными в Javascript? У меня есть данные, хранящиеся в переменных.

Я немного искал Google, и похоже, что он много говорил. Я думал, что могу использовать XMLWriter, например:

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

как указано в этом уроке: Учебник EHow

Однако, когда я выполняю этот код, я получаю следующую ошибку:

ReferenceError: XMLWriter is not defined

Любые идеи о том, как я могу начать с этого?

Спасибо заранее!

Лучший ответ:

Отказ от ответственности: Следующий ответ предполагает, что вы используете среду JavaScript в веб-браузере.

JavaScript обрабатывает XML с помощью объектов XML DOM.
Вы можете получить такой объект тремя способами:

1. Создание нового объекта DOM XML

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

Первый аргумент может содержать URI пространства имен создаваемого документа, если документ принадлежит одному.

Источник: https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument

2. Получение XML файла с помощью 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. Разбор строки, содержащей сериализованный XML

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

Когда вы получили объект XML DOM, вы можете использовать методы для его управления, например

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

Полную ссылку см. в http://www.w3schools.com/xml/dom_intro.asp

Примечание:
Важно, чтобы вы не использовали методы, предоставляемые пространством имен документов, i. е.

var node = document.createElement(«Item»);

Это создаст узлы HTML вместо узлов XML и приведет к node с именами нижних регистров. Имена тегов XML чувствительны к регистру, в отличие от имен тегов HTML.

Вы можете сериализовать объекты XML DOM следующим образом:

var serializer = new XMLSerializer(); var xmlString = serializer.serializeToString(xmlDoc); Ответ №1

Учтите, что нам нужно создать следующий 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>

мы можем написать следующий код для генерации вышеуказанного XML

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);

Если какой-либо текст должен быть написан между тегами, мы можем использовать свойство innerHTML для достижения этого.

пример

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

Для более подробной информации, пожалуйста, перейдите по ссылке ниже. Приведенный выше пример был объяснен там более подробно.

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

Ответ №2

эта работа для меня..

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

Работает только в 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); });

Затем нажмите xmlDoc.xml на свой Java-код.

Ответ №4

Просто используйте

var xmlString = ‘<?xml version=»1.0″ ?><root />’; var xml = jQuery.parseXML(xml);

Это jQuery.parseXML, поэтому не нужно беспокоиться о кросс-браузерных трюках. Используйте jQuery как HTML, используя собственный движок XML.

Ответ №5

Ваш код ссылается на эту библиотеку

Вы можете включить его, и тогда ваш код должен работать как есть. Если вы хотите сделать это без предварительной подготовки библиотеки и собрать ее только с помощью встроенных функций – следуйте ответу от @Seb3736.

В примере браузера

<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> Ответ №6

xml-writer (пакет npm) Я думаю, что это хороший способ легко создавать и писать xml файлы. Также он может быть использован на стороне сервера с 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());

Оцените статью
Добавить комментарий