web-dev-qa-db-ja.com

JavascriptでXMLを作成する

私は疑問に思っています、JavascriptのいくつかのデータでXMLファイルを作成することは可能ですか?データを変数に保存しています。

私は少しグーグルで調べましたが、あまり語られていないようです。私はこのような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

これをどのように始めることができますか?

前もって感謝します!

32
BigBug

免責事項:次の回答は、WebブラウザのJavaScript環境を使用していることを前提としています。

JavaScriptは、「XML DOMオブジェクト」でXMLを処理します。このようなオブジェクトは、次の3つの方法で取得できます。

1。新しいXML DOMオブジェクトの作成

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

最初の引数には、作成するドキュメントの名前空間URIを含めることができます(ドキュメントが名前空間URIに属する場合)。

ソース: https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument

2。 XMLHttpRequestを使用したXMLファイルの取得

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 を参照してください

注:重要なのは、ドキュメント名前空間によって提供されるメソッドを使用しないことです。 e。

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

これにより、XMLノードの代わりにHTMLノードが作成され、タグ名が小文字のノードが作成されます。 HTMLタグ名とは対照的に、XMLタグ名では大文字と小文字が区別されます。

次のようにXML DOMオブジェクトをシリアル化できます。

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

次の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

9
kkk

私のためのこの仕事..

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

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

4
elad gasner

単に使用する

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

jQuery.parseXML なので、ブラウザ間のトリックを心配する必要はありません。 HTMLと同様にjQueryを使用します。jQueryはネイティブXMLエンジンを使用しています。

2
metadings

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コードにプッシュします。

2
srijan

あなたのコードは このライブラリ を参照しています

含めることができ、問題のコードをそのまま実行する必要があります。ライブラリを追加せずにこれを行い、組み込み関数のみでビルドする場合は、@ 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>

0
user3051040

xml-writer(npm package) これは、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());
0
qant