Javascript 读取xml文件,修改值/添加元素/属性,并如何保存xml?

Javascript 读取xml文件,修改值/添加元素/属性,并如何保存xml?,javascript,xml,Javascript,Xml,使用javascript,我想从磁盘读取xml文件,修改值/添加元素/属性,并将xml保存回磁盘 这里有人知道我能找到IE和Firefox的例子吗?我已经准备好阅读示例,现在改变值就是问题所在 谢谢假设您试图从浏览器而不是node.js读取和写入磁盘, 第一步是使用file类型的input标记访问文件系统 <!DOCTYPE html> <head> <meta charset="UTF-8"> </head> <body> &

使用javascript,我想从磁盘读取xml文件,修改值/添加元素/属性,并将xml保存回磁盘

这里有人知道我能找到IE和Firefox的例子吗?我已经准备好阅读示例,现在改变值就是问题所在


谢谢

假设您试图从浏览器而不是node.js读取和写入磁盘, 第一步是使用
file
类型的
input
标记访问文件系统

<!DOCTYPE html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <input type="file" id="input" accept="text/xml">
  <script src="script.js"></script>
</body>
将blob解析为元素树的方法不止一种。 在这里,我利用了浏览器解析HTTP请求中的xml文档这一事实

function blobToDocument(blob, callback) {
  const url = URL.createObjectURL(blob);
  const request = new XMLHttpRequest();
  request.open('Get', url);
  request.responseType = 'document';
  request.addEventListener('load', () => {
    callback(request.response);
  });
  request.send();
}
解析blob之后,我们可以像处理DOM树一样处理它

function editDocument(document) {
  const element = document.createElement('editor');
  element.textContent = 'JavaScript';
  document.firstChild.appendChild(element);
  return document;
}
为了将文件保存到磁盘,我们需要反转解析过程, 将元素树转换回字符串

function documentToString(document) {
  const serializer = new XMLSerializer();
  return serializer.serializeToString(document);
}
唯一剩下的就是将文件发送回磁盘。 为了实现这一点,我们可以在带有修改文件的链接上触发单击事件

function download(string, mime) {
  const blob = new Blob([string], { type: mime });
  const a = document.createElement('a');
  const url = URL.createObjectURL(blob);
  a.href = url;
  a.download = 'document.xml';
  a.click();
}
这是完整的代码

const input=document.querySelector(“#input”);
input.addEventListener('change',()=>{
const file=input.files.item(0);
blobToDocument(文件,(xmlDocument)=>{
editDocument(xmlDocument);
下载(documentToString(xmlDocument),“text/xml”);
});
});
函数blobToDocument(blob,回调){
const url=url.createObjectURL(blob);
const request=new XMLHttpRequest();
打开('Get',url);
request.responseType='document';
request.addEventListener('load',()=>{
回调(请求.响应);
});
request.send();
}
功能编辑文档(文档){
常量元素=document.createElement('editor');
element.textContent='JavaScript';
document.firstChild.appendChild(元素);
归还文件;
}
函数documentToString(文档){
const serializer=新的XMLSerializer();
返回serializer.serializeToString(文档);
}
函数下载(字符串、mime){
constblob=newblob([string],{type:mime});
常量a=document.createElement('a');
const url=url.createObjectURL(blob);
a、 href=url;
a、 下载='document.xml';
a、 单击();
}

function download(string, mime) {
  const blob = new Blob([string], { type: mime });
  const a = document.createElement('a');
  const url = URL.createObjectURL(blob);
  a.href = url;
  a.download = 'document.xml';
  a.click();
}