【问题标题】:XML Creating, Editing and Saving in JS在 JS 中创建、编辑和保存 XML
【发布时间】:2015-03-22 22:25:58
【问题描述】:
我正在尝试创建具有大量 XML 编辑依赖项的东西,我对如何做某些事情有一些疑问。
我知道的:
我的问题:
【问题讨论】:
标签:
javascript
html
xml
xml-parsing
【解决方案1】:
很遗憾,您可能无法做您想做的事。 JavaScript/ECMAScript 不能在没有任何直接交互的情况下直接写入文件(至少不能写入典型文件系统中的文件,如“我的文档”或“桌面”文件夹)。
首先,您可以将 XML/HTML DOM 保存为这样的字符串(仅适用于大多数浏览器和 IE 9+ 的更高版本):
if(typeof window.XMLSerializer == "undefined") {
throw new Error("No modern XML serializer found.");
}
var s = new XMLSerializer();
var xmlString = s.serializeToString( xmlDomVar );
之后,就保存数据而言,您只有 2 个选项(不使用一些额外的插件,甚至可能有许多限制):
-
在用户授予使用 localStorage 的权限后,将数据保存到只有使用 localStorage 的应用程序才能访问的沙盒文件(存储在浏览器确定的位置,您不能定义“C:\User\ MyUser\Desktop\myfile.xml”作为位置)。
-
另存为 Blob 数据,然后请求用户下载。此方法不会让您定义您希望用户将其保存在何处,它只是显示典型的“将文件另存为...”对话框,供用户指定保存数据的位置。
对于创建“空白”xml 文件......你不能。它必须至少包含开始和结束标记,否则浏览器将返回包含 html、head 和 body 标记的基本格式的 HTML DOM。再一次,仅适用于 IE9+ 和大多数其他现代浏览器:
if (typeof window.DOMParser != "undefined") {
parseXml = function(xmlStr) {
return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
};
} else {
throw new Error("No modern XML parser found.");
}
// This will create a new XML DOM containing whatever is in the string.
var newXmlDom = parseXml( '<xml></xml>' );
// This will create a basic HTML structure if you do not provide any valid XML.
var newHtmlDom = parseXml();