2011-12-14 18 views
1

"Javascriptを使用してXMLデータを挿入する"という実装に苦しんでいるようです。Javascriptを使用してXMLノードを挿入する

私のアプリケーションはasp.net AJAXのasp.netです。次のように

私のXML文書は次のとおりです。

<?xml version="1.0" encoding="utf-8" ?> 
<hotels> 
    <hotel supplier="Sarova panafric" id="HTL-10001"> 
     <supplier>Sarova panafric</supplier> 
     <contact>Mr S Njoroge</contact> 
     <tel>75-525254</tel> 
    </hotel> 
    <hotel supplier="Sarova mara" id="HTL-10002"> 
     <supplier>Sarova mara</supplier> 
     <contact>Mr ole seni</contact> 
     <tel>20-54574</tel> 
    </hotel> 
</hotels> 

これは私が試してみて、私のXMLファイルにデータを挿入するために使用するJavaScript関数:XMLファイルがルート上に座っている

function addhotels() { 
    var xml; 
    if (window.ActiveXObject) { 
     xml = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else { 
     xml = new XMLHttpRequest(); 
    } 
    xml.open("GET", "hotelRates.xml", true); 
    xml.send(null); 

    var hotel = xml.responseXML.createElement("hotel"); 

    var supplier = xml.responseXML.createElement("supplier"); 
    supplier.appendChild(xml.responseXML.createTextNode("Sarova stanley")); 

    var contact = xml.responseXML.createElement("contact"); 
    contact.appendChild(xml.responseXML.createTextNode("Mr Njoroge")); 

    var tel = xml.responseXML.createElement("tel"); 
    tel.appendChild(xml.responseXML.createTextNode("21454741")); 

    hotel.appendChild(supplier); 
    hotel.appendChild(contact); 
    hotel.appendChild(tel); 
    xml.responseXML.appendChild(hotel); 
} 

私のプロジェクトのフォルダ、ページがどこにあるか。

なぜ動作しないのかわかりません。

=========== 私は今、次のようにコードを変更しましたが、それでも効果はありません。

function addhotels() { 
    var xml; 
    if (window.ActiveXObject) { 
     xml = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else { 
     xml = new XMLHttpRequest(); 
    } 
    xml.open("GET", "hotelRates.xml", true); 
    xml.send(null); 

    var hotels = xml.responseXML.createElement("hotels"); 

    var supplier = xml.responseXML.createElement("supplier"); 
    supplier.appendChild(xml.responseXML.createTextNode("Sarova stanley")); 

    var contact = xml.responseXML.createElement("contact"); 
    contact.appendChild(xml.responseXML.createTextNode("Mr Njoroge")); 

    var tel = xml.responseXML.createElement("tel"); 
    tel.appendChild(xml.responseXML.createTextNode("21454741")); 

    hotels.appendChild(supplier); 
    hotels.appendChild(contact); 
    hotels.appendChild(tel); 
    xml.responseXML.appendChild(hotels); 
} 
+1

どうしたらうまくいかないのですか? –

+0

あなたはまだ 'xml.responseXML.appendChild'を行っています。以下の両方の回答に記載されているように、ドキュメント自体に追加することはできません。 –

答えて

1

現在ドキュメントにノードを追加し

xml.responseXML.documentElement.appendChild(hotel); 

を試してみて、XML文書は1つのだけルート要素を持っている可能性があるため、不正な操作するものです。あなたは現在sendを起動してから応答がすぐに利用可能であることを期待しているルート要素(<hotels/>

+1

**大きな**問題は、彼が非同期要求を開始し、応答がすぐに準備ができていることを期待しているという事実です。 – Pointy

+0

ああ、私はこれを見ていませんでした。しかし、彼はそれを修正するときに彼は私の答えを考慮する必要があります。 –

2

から
xml.responseXML.documentElementポイント。これは根本的に間違っています。 xml.opentrue)の3番目の引数は、要求を非同期に実行することを示します。 @ Dr.Molleで指摘したように、私もxml.responseXML.documentElement.appendChildxml.responseXML.appendChildを変更

function addhotels() { 
    var xml; 
    if (window.ActiveXObject) { 
     xml = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else { 
     xml = new XMLHttpRequest(); 
    } 
    xml.onreadystatechange = function() { 
     if (xml.readyState == 4 && xml.status == 200) { 
      var resp = xml.responseXML; 
      var hotel = xml.responseXML.createElement("hotel"); 

      var supplier = xml.responseXML.createElement("supplier"); 
      supplier.appendChild(xml.responseXML 
        .createTextNode("Sarova stanley")); 

      var contact = xml.responseXML.createElement("contact"); 
      contact.appendChild(xml.responseXML.createTextNode("Mr Njoroge")); 

      var tel = xml.responseXML.createElement("tel"); 
      tel.appendChild(xml.responseXML.createTextNode("21454741")); 

      hotel.appendChild(supplier); 
      hotel.appendChild(contact); 
      hotel.appendChild(tel); 
      xml.responseXML.documentElement.appendChild(hotel); 
     } 
    } 
    xml.open("GET", "hotelRates.xml", true); 
    xml.send(null); 
} 

注:あなたはxml.onreadystatechangeコールバックでの応答を処理する必要があります。ドキュメント自体には追加できません。

+0

lwburkありがとうございます、私は試して結果にあなたに通知します。 –

0

あなたは変更を保存していないと言います。 XMLファイルに保存する必要があります。最初にレスポンスXMLを変数xmldocとして取得し、新しいデータを追加して、最後にwrite-xmldoc.save( "hotelrates.xml");

関連する問題