js写入xml的实例

JavaScript014

js写入xml的实例,第1张

用JS操作XML,对客户端来说只有读取的权限如果需要对XML文件进行修改保存操作,就要用FSO<script type="text/javascript">

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>')

}