使用Javascript创建XML文件
使用Javascript创建XML文件
我有以下代码:
xmlDoc=loadXMLDoc("dbbackup.xml"); x=xmlDoc.getElementsByTagName("record"); alert(x); for (i=0;i<3;i++) { newel=xmlDoc.createElement("edition"); newtext=xmlDoc.createTextNode("first"); alert("x : "+x[i]); alert("newtext :"+newtext.nodevalue); x[i].appendChild(newel); alert("sd"); } function loadXMLDoc(dname) { if (window.XMLHttpRequest) { xhttp=new XMLHttpRequest(); } else { xhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xhttp.open("GET",dname,false); xhttp.send(); return xhttp.responseXML; }
我在同一位置创建了dbbackup.xml
,XML文件如下:
但在运行脚本后,xml
文件没有得到更新。
问题的原因是JavaScript的设计初衷是只能在内存中修改加载在浏览器框架内的文件。浏览器可以被看作是一个沙盒,你的网页(html、xml等)可以在其中运行。只要xml在沙盒中运行,一切都很好。但是如果允许xml在沙盒之外运行,想想网站可能对你的机器造成的破坏吧。
JavaScript无法单独永久地影响本地机器上的文件。它只能在沙盒中运行(在本地,它可以调用Java或其他API来影响变化,但这是完全另一回事)。JavaScript只能在客户端运行。如果你希望它影响服务器,它只能通过回调服务器来实现。在服务器上,你需要一些编程语言(如asp.net、java、php、html等)来接收并处理这个请求。
JavaScript本身非常强大,但只能在沙盒内(浏览器)执行。要让它影响浏览器之外的任何东西,它必须依赖于已经就位并准备好接收这些请求的其他程序。
而这一切都是出于安全考虑。
创建一个使用JavaScript创建XML文件的问题的出现原因是,作者想在客户端创建XML文件并在日常实践中使用。解决方法是使用JavaScript编写代码来创建XML文件,然后将其发送到服务器。
下面是解决方法的详细说明:
首先,作者定义了一个名为makeSlot的函数。在函数内部,作者使用XMLHttpRequest对象创建了一个XMLHttpRequest实例,并设置了onreadystatechange事件处理程序。当readyState为4且status为200时,调用showBon函数。然后,作者打开一个POST请求,将wrapUp函数的返回值发送给服务器。
wrapUp函数是用来构建最终的XML文件的。首先,它使用document.implementation.createDocument方法创建一个空的XML文档对象。然后,它创建一个名为operator的元素,并将从id为"rText"的元素中获取的文本值创建为一个文本节点,并将其附加到operator元素中。接下来,它创建一个名为transaction的根元素,并设置一些属性。根据某些条件,它可能会设置其他属性。然后,它将operator元素附加到根元素中。
接下来,作者获取所有的div元素,并使用for循环遍历它们。根据div元素的column属性的值,作者创建一个名为row的元素,并设置一些属性。根据不同的column值,作者可能会设置不同的属性。然后,作者将row元素附加到根元素中。
最后,作者将根元素附加到transaction文档中,并返回该文档。
通过调用makeSlot函数,可以使用JavaScript创建XML文件并将其发送到服务器。
以上是创建一个使用JavaScript创建XML文件的问题的出现原因以及解决方法的详细说明。
无法使用Javascript直接在客户端的web浏览器中修改磁盘上的文件。要实际上在服务器上读写文件,必须使用服务器端语言和技术,如PHP或ASP。
没有其他方法可以在不使用服务器端脚本的情况下使用Javascript创建xml文件。
仅就SomekidwithHTML的评论提到的AJAX而言,您可以使用Javascript创建XML,然后使用类似jQuery的AJAX将此信息POST回控制器方法。然后,您可以使用控制器将其保存到磁盘/数据库/其他位置。我来自MVC.NET背景(示例实现请参见stackoverflow.com/a/8517361/201648),但在大多数Web语言/框架中实现此相同模式应该是可能的。我认为我应该稍微详细解释一下这一点,因为这是一个相当常见的模式。
稍微离题一下,如果您喜欢使用JavaScript,还有一些服务器端的JavaScript实现,例如node.js可能会对您有兴趣(请参见nodejs.org)。