Создать XML в Javascript
Мне интересно, возможно ли создать файл XML с некоторыми данными в Javascript? У меня есть данные, хранящиеся в переменных.
Я немного погуглил, и не похоже, чтобы о нем много говорили. Я думал, что смогу использовать XMLWriter
такие как это:
var XML = new XMLWriter();
XML.BeginNode ("testing");
XML.Node("testingOne");
XML.Node("TestingTwo");
XML.Node("TestingThree");
XML.EndNode();
как указано в этом уроке: EHow Tutorial
Однако, когда я выполняю этот код, я получаю следующую ошибку:
ReferenceError: XMLWriter is not defined
Любые идеи о том, как я могу начать с этим?
Заранее спасибо!
5 ответов
Отказ от ответственности: следующий ответ предполагает, что вы используете среду JavaScript веб-браузера.
JavaScript обрабатывает XML с помощью "объектов XML DOM". Вы можете получить такой объект тремя способами:
1. Создание нового объекта XML DOM
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
Примечание. Важно, чтобы вы не использовали методы, предоставляемые пространством имен документа, т.е.
var node = document.createElement("Item");
Это создаст узлы HTML вместо узлов XML и приведет к узлу с именами тегов в нижнем регистре. Имена тегов XML чувствительны к регистру, в отличие от имен тегов HTML.
Вы можете сериализовать объекты XML DOM следующим образом:
var serializer = new XMLSerializer();
var xmlString = serializer.serializeToString(xmlDoc);
Учтите, что нам нужно создать следующий 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
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());
Эта работа для меня..
var xml = parser.parseFromString('<?xml version="1.0" encoding="utf-8"?><root></root>', "application/xml");
Просто использовать
var xmlString = '<?xml version="1.0" ?><root />';
var xml = jQuery.parseXML(xml);
Это jQuery.parseXML, поэтому не нужно беспокоиться о кросс-браузерных хитростях. Используйте jQuery как HTML, он использует собственный движок XML.
Работает только в 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.
Ваш код ссылается на эту библиотеку
Вы можете включить его, и тогда ваш код должен работать как есть. Если вы хотите сделать это без предварительной подготовки библиотеки и собрать ее только с помощью встроенных функций - следуйте ответу от @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>