function go(){var thebook,root,theelem
var xmldoc=new ActiveXObject("Msxml2.DOMDocument.4.0")
xmldoc.async=false
xmldoc.load("C:\\test.xml")
root=xmldoc.documentElement
// alert(xmldoc.xml)
thebook=xmldoc.createElement("book")
// thebook.setAttribute("id" "15")
theelem=xmldoc.createElement("name")
theelem.text="xinshu"
thebook.appendChild(theelem)
theelem=xmldoc.createElement("price")
theelem.text="20"
thebook.appendChild(theelem)
theelem=xmldoc.createElement("momo")
theelem.text="very good!"
thebook.appendChild(theelem)
root.appendChild(thebook)
// alert(xmldoc.xml)thebook=root.selectSingleNode("/books/book[name='xinshu']")
thebook.setAttribute("id","15")
// alert(xmldoc.xml)
thebook=root.selectSingleNode("/books/book[name='哈里波特']")
thebook.childNodes[1].text="20"
thebook.setAttribute("id","25")
// alert(root.xml)
thebook.parentNode.removeChild(thebook)
alert(xmldoc.xml)
var somebook=root.selectNodes("/books/book[price<10]")
// alert(somebook.xml)
somebook.removeAll()
alert(xmldoc.xml)
xmldoc.loadXML(xmldoc.xml)
xmldoc.save("C:\\test.xml") //会提示权限不足..其实我在想 既然DOM给出了这个方法必然有它的用途,但是目前还没发现它在哪能用到 . 试过多个地方使用 都会出现权限问题 可能是JS本身的限制
// var fso, tf //使用JSO必须安装个插件
// fso = new ActiveXObject("Scripting.FileSystemObject")
// 创建新文件
// tf = fso.CreateTextFile("c:\\testfile.xml", true)
// 填写数据,并增加换行符
// tf.WriteLine("Testing 1, 2, 3.")
// 增加3个空行
// tf.WriteBlankLines(3)
// 填写一行,不带换行符
// tf.Write (xmldoc.xml)
// 关闭文件
// tf.Close()
}
</script>其它参考:http://www.68design.net/Web-Guide/HTMLCSS/9335-1.html
你把问题描述清楚啊。
是对WEB页面的XML数据的进行操作?
是对传递来的XML数据进行操作?
是对本地硬盘的XML文件进行操作?
提供个思路:
通过jquery的$.ajax()请求该xml资源,里面参数dataType:xml,如此,即可在本地js代码上遍历此xml文档。把文件显示于页面。做了修改,删除操作后,把数据用JSON方式传递到后台,进行文件读写操作。
$.ajax({
url : rootPath + "/userInfo.do?method=saveSetting&columnIds=。。。",
dataType : "json",
success : function(response) {
if (response) {
alert("保存成功")
}
else
alert("保存失败" )
}
}
})
一、xml文件\内容读取 1、读取xml文件 $.get( xmlfile.xml , function (xml){ //xml即为可以读取使用的内容,具体读取见第2点 })2、读取xml内容 如果读取的xml是来于xml文件,这结合上面的那点,处理如下 $.get( xmlfile.xml , function (xml){ $(xml). fi
一、xml文件\内容读取
1、读取xml文件
$.get("xmlfile.xml",function(xml){
//xml即为可以读取使用的内容,具体读取见第2点
})
2、读取xml内容
如果读取的xml是来于xml文件,这结合上面的那点,处理如下
$.get("xmlfile.xml",function(xml){
$(xml).find("item").length
})
如果读取的是xml字符串,则要注意一点,xml字符串的必然被”<xml>”和”</xml>”包围才可以被解析
$("<xml><root><item></item></root></xml>").find("item").length二、解析xml内容示例xml:<?xml version="1.0" encoding="utf-8" ?><fields>
<field Name="Name1">
<fieldname>dsname</fieldname>
<datatype>字符</datatype>
</field>
<field Name="Name2">
<fieldname>dstype</fieldname>
<datatype>字符</datatype>
</field></fields>以下是解析示例代码$(xml).find("field").each(function() {
var field = $(this)
var fName = field.attr("Name")//读取节点属性
var dataType = field.find("datatype").text()//读取子节点的值
})
用xslt比较简单,而且速度也会比javascript遍历dom快很多。function transformToTable(xmlUrl,xslUrl,appendTo){
var xmldom=document.implementation.createDocument()
xmldom.load(xmlUrl)
var xsldom=document.implementation.createDocument()
xsldom.load(xslUrl)
var xslProcessor=new XSLTProcessor()
xslProcessor.importStylesheet(xsldom)
var result=xslProcessor.transformToTragment(xmldom,document)
appendTo.appendChild(result)
}
只是简单写了写,提供大致思路
xsl和xslt的教程可以看http://www.w3course.net/xsl/index.htm
要把html的表格改成xml的可以用正则表达式去匹配innerHTML,这种方法当然是比较快的
还有就是遍历,比较麻烦,而且速度也会慢一些
function transformToXML(elem){
if (typeof elem=='string'){
var div=document.createElement('DIV')
div.style.display='none'
div.innerHTML=elem
document.body.appendChild(div)
elem=document.body.lastChild.getElementsByTagName('table')[0]
}
if (elem.nodeName!='TABLE') return
var result='<?xml version="1.0" encoding="utf-8" standalone="yes"?>'+"\n"
var titles=[],tr,i,j
result+='<booklist>'+"\n"
tr=elem.getElementsByTagName('tr')
if (tr[0].firstChild.nodeName=='th'){
for (i=0i<tr[0].childNodes.lengthi++){
if (tr[0].childNodes[i].nodeType==1){
titles.push(tr[0].childNodes[i].innerHTML.replace(/(^\s|\s$)/,''))
}
}
}
for(i=0i<tr.lengthi++){
result+='<book>'+"\n"
for(j=0j<tr[i].childNodes.lengthj++){
if (tr[i].childNodes[j].nodeType!=1) continue
if (!titles[j]){
titles[j]='item'
}
result+='<'+titles[j]+'>'
+tr[i].childNodes[j].innerHTML
+'</'+titles[j]+'>'+"\n"
}
result+='</book>'+"\n"
}
result+='</booklist>'+"\n"
return result
}
上面是一个遍历的函数,虽然还不完善,但是已经满足基本的功能了。可以在firebug里测试一下
console.log(transformToXML('<table><tr><td>some book</td></tr></table>'))
函数里面booklist和book之类的标签名
下面是一个正则表达式的函数
function transformToXML(elem){
if (typeof elem=='object'){
elem='<table>'+elem.innerHTML+'</table>'
}
return '<?xml version="1.0" encoding="utf-8" standalone="yes"?>'+
elem.replace(/<table(\s*)[^>]+>/,'<booklist>')
.replace(/<\/table>/,'</booklist>')
.replace(/<(\/?)(tbody|tfoot|thead)(\s*)[^>]+>/,'')
.replace(/<tr(\s*)[^>]+>/,'<book>')
.replace(/<\/tr>/,'</book>')
.replace(/<td(\s*)[^>]+>/,'<item>')
.replace(/<\/td>/,'</item>')
}