Вопрос:
Мне интересно, возможно ли создать 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());