【发布时间】:2013-12-24 18:58:17
【问题描述】:
我的任务是加载一个 xml 文档并允许用户修改 xml 的内容并在用户完成后保存。保存后,我需要通过电子邮件将该 xml 文件管理员发送到网站上。我知道我可以使用服务器端代码加载、修改和保存 xml 文档,但我的任务是找到一种仅使用 javascript 来执行此操作的方法。这是一个只有特定用户才能使用的 Intranet 应用程序,所以我决定使用 html 应用程序。 我首先开始使用 VS 创建一个网站来执行此操作,但后来发现无法使用 javascript 保存 xml 文档,因此我切换到了 hta 应用程序。 在 VS 中,我能够加载 xml 文档并在基诺网格内显示结果,但无法保存 xml。在我的 html 应用程序中,我可以保存一个 xml 文档,但它不会加载 xml 及其所有节点。
<?xml version="1.0" encoding="iso-8859-1"?>
<rpp>
<city name="SomeName">
<property>Owner</property>
<location>Address</location>
<phone>phone</phone>
</city>
</rpp>
Javascript:
var xml = loadXMLDoc("rpp.xml");
function loadXMLDoc(dname) {
if (window.ActiveXObject) {
xhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
else {
xhttp = new XMLHttpRequest();
}
xhttp.open("GET", dname, false);
if (xhttp.overrideMimeType)
xhttp.overrideMimeType('text/xml');
xhttp.send("");
var xmlDoc = xhttp.responseXML;
if (!xmlDoc) {
if (isIE) {
xmlDoc = getMSXmlParser();
xmlDoc.async = false;
xmlDoc.loadXML(xhttp.responseText);
}
else
xmlDoc = (new DOMParser()).parseFromString(xhttp.responseText, 'text/xml');
}
return xmlDoc;
}
//code came from this site
//http://blog-rat.blogspot.com/2010/11/xmlhttprequestresponsexml-returns-null.html
function getMSXmlParser() {
var parser = ['Msxml2.DOMDocument.6.0',
'Msxml2.DOMDocument.5.0',
'Msxml2.DOMDocument.4.0',
'Msxml2.DOMDocument.3.0',
'MSXML2.DOMDocument',
'Microsoft.XMLDOM']; // the same as MSXML.DOMDocument
for (var i in parser) {
try {
var xParser = new ActiveXObject(parser[i]);
if (xParser) {
return xParser;
}
}
catch (e) { }
}
return null;
}
当我用 VS 加载我的 xml 时,我会检索所有节点及其值,并且能够在剑道网格中显示该信息。 当我从 hta 加载我的 xml 时,没有 childNodes。
任何帮助将不胜感激。 谢谢。
【问题讨论】: