我似乎陷入了使用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函数:
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);
}
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 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);
}
答案 0 :(得分:2)
您当前正在调用send
,然后希望响应立即可用。这根本就是错误的。 xml.open
(true
)的第三个参数表示您希望异步执行请求。您需要在xml.onreadystatechange
回调中处理响应:
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.responseXML.appendChild
更改为xml.responseXML.documentElement.appendChild
,正如@ Dr.Molle所指出的那样。您无法附加到文档本身。
答案 1 :(得分:1)
尝试
xml.responseXML.documentElement.appendChild(hotel);
目前您将节点附加到文档,什么是非法操作,因为XML文档可能只有1个根元素。
xml.responseXML.documentElement
指向根元素(<hotels/>
)
答案 2 :(得分:0)
我会说你没有保存所做的更改。您需要将其保存到XML文件。您可以先将响应XML作为变量xmldoc,然后将新数据添加到其中,最后写入-xmldoc.save(“hotelrates.xml”);