DooIT@江西搜才网
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
49 随笔 :: 17 文章 :: 1146 评论 :: 28 引用
用javascript操作xml
文中尽量用上所有的操作和属性,以做示范
<
script language
=
"
JavaScript
"
>
<!--
var
doc
=
new
ActiveXObject(
"
Msxml2.DOMDocument
"
);
//
ie5.5+,CreateObject("Microsoft.XMLDOM")
//
加载文档
//
doc.load("b.xml");
//
创建文件头
var
p
=
doc.createProcessingInstruction(
"
xml
"
,
"
version='1.0' encoding='gb2312'
"
);
//
添加文件头
doc.appendChild(p);
//
用于直接加载时获得根接点
//
var root = doc.documentElement;
//
两种方式创建根接点
//
var root = doc.createElement("students");
var
root
=
doc.createNode(
1
,
"
students
"
,
""
);
//
创建子接点
var
n
=
doc.createNode(
1
,
"
ttyp
"
,
""
);
//
指定子接点文本
//
n.text = " this is a test";
//
创建孙接点
var
o
=
doc.createElement(
"
sex
"
);
o.text
=
"
男
"
;
//
指定其文本
//
创建属性
var
r
=
doc.createAttribute(
"
id
"
);
r.value
=
"
test
"
;
//
添加属性
n.setAttributeNode(r);
//
创建第二个属性
var
r1
=
doc.createAttribute(
"
class
"
);
r1.value
=
"
tt
"
;
//
添加属性
n.setAttributeNode(r1);
//
删除第二个属性
n.removeAttribute(
"
class
"
);
//
添加孙接点
n.appendChild(o);
//
添加文本接点
n.appendChild(doc.createTextNode(
"
this is a text node.
"
));
//
添加注释
n.appendChild(doc.createComment(
"
this is a comment\n
"
));
//
添加子接点
root.appendChild(n);
//
复制接点
var
m
=
n.cloneNode(
true
);
root.appendChild(m);
//
删除接点
root.removeChild(root.childNodes(
0
));
//
创建数据段
var
c
=
doc.createCDATASection(
"
this is a cdata
"
);
c.text
=
"
hi,cdata
"
;
//
添加数据段
root.appendChild(c);
//
添加根接点
doc.appendChild(root);
//
查找接点
var
a
=
doc.getElementsByTagName(
"
ttyp
"
);
//
var a = doc.selectNodes("//ttyp");
//
显示改接点的属性
for
(
var
i
=
0
;i
<
a.length;i
++
)
{
alert(a[i].xml);
for
(
var
j
=
0
;j
<
a[i].attributes.length;j
++
)
{
alert(a[i].attributes[j].name);
}
}
//
修改节点,利用XPATH定位节点
var
b
=
doc.selectSingleNode(
"
//ttyp/sex
"
);
b.text
=
"
女
"
;
//
alert(doc.xml);
//
XML保存(需要在服务端,客户端用FSO)
//
doc.save();
//
查看根接点XML
if
(n)
{
alert(n.ownerDocument.xml);
}
//
-->
</
script
>
欢迎访问
江西搜才网
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2004-11-30 15:55
ttyp
阅读(33164)
评论(48)
编辑
收藏
评论
1308319
#1楼
2005-04-08 14:01
feig
感谢楼主,以前我做c/s的,对javascript的东西了解太少。
回复
引用
#2楼
2005-07-05 12:16
Koy
我以前也是做c/s的,现在也要学javascript了
回复
引用
#3楼
2005-08-29 11:30
hawk[未注册用户]
我是用js加载xml的片断(从数据库读出的一段符合xml规则的字符串)读取节点,添加均没有问题,可最后却不知道如何将修改后的xml片断保存再放入数据库!求助!!
回复
引用
#4楼
[
楼主
]
2005-08-29 12:40
ttyp
doc.save(yourpath);
//你在code collection 可以看到很多XML操作
回复
引用
查看
#5楼
2005-08-29 13:19
hawk[未注册用户]
我保存的是xml的片断,不是xml的文件,是要把保存后的xml片断作为字符串再放入数据库,code collection 没有关于xml片断保存的操作阿!
回复
引用
#6楼
[
楼主
]
2005-08-29 13:26
ttyp
片段是什么?一个接点下的所有内容么,node.xml就是其内容啊
回复
引用
查看
#7楼
2005-08-29 17:25
hawk[未注册用户]
就是
<?xml version="1.0" encoding="gb2312"?><xml><group id="我的好友"><friend>1001</friend><friend>1002</friend><friend>1003</friend></group><group id="我的同事"><friend>1005</friend></group></xml>
这是放在数据库里得一个字段,用loadXML()的方法后可以和加载xml文件一样用,包括查找,修改,添加节点并显示出来,但是找不修改后保存再放回数据库的方法
回复
引用
#8楼
[
楼主
]
2005-08-29 19:05
ttyp
你要通过js直接保存在数据库里?那是不行得了,dom没有操作数据库得功能,只能保存为文件,你用doc.xml取得内容后,再用你怎么读得怎么写回去吧
回复
引用
查看
#9楼
2005-09-17 01:55
xiao3[未注册用户]
请教楼主大人,我在使用asp页面中调用 如下的代码时:(javascript中)
<script language=javascript>
var objXML = new ActiveXObject("MSXML2.DOMDocument");
objXML.async = false;
objXML.load("data1.xml");
alert("d:"+objXML.xml);
</script>
如果 装载的 data1.xml文件的第一句是:<?xml version="1.0" encoding="utf-8" ?>
alert出来就是空的。
而如果把第一句修改成<?xml version="1.0" encoding="gb2312" ?>
alert出来的内容是data1.xml的内容。
请教一下,如何在保持<?xml version="1.0" encoding="utf-8" ?> 的情况下,在javascript中能正确装载 xml文件? 现在是要把编码修改成 gb2312才可以。
谢谢。
回复
引用
#10楼
[
楼主
]
2005-09-17 08:06
ttyp
XML文件的编码格式修改为UTF-8试试(用记事本打开,另存为,下面有选编码的格式)
回复
引用
查看
#11楼
2005-09-18 02:07
xiao3[未注册用户]
谢谢楼主!
这样是可以load进来的,用这种方法可以,不知道是否还有其他的方法
谢谢。
回复
引用
#12楼
2005-10-19 20:26
gphy[未注册用户]
楼主似乎没给出修改节点的方法
求解
回复
引用
#13楼
[
楼主
]
2005-10-19 22:55
ttyp
加了修改的部分
//修改节点,利用XPATH定位节点
var b = doc.selectSingleNode("//ttyp/sex");
b.text = "女";
回复
引用
查看
#14楼
2005-11-05 21:14
nameless[未注册用户]
为什么无论encoding=""这项指定为gb2312或其它等.alert(doc.xml)出来看到的头都只有<?xml version="1.0"?>而不包括编码?这样用fso保存的话头就只有<?xml version="1.0"?>,若有文中包含中文就会有问题(我用fso.write(doc.xml)的方法保存)
回复
引用
#15楼
[
楼主
]
2005-11-06 12:31
ttyp
似乎有这个问题,但是只访问文中得p得属性,可以访问到encoding属性,你可以在最后做一个替换,把<?xml version="1.0">替换成你要得,然后再保存
回复
引用
查看
#16楼
2005-11-09 00:05
liuzhiyong[未注册用户]
请问在服务器中怎么保存XML的内容,客户端用FSO保存后又怎么传给服务端?上传?
回复
引用
#17楼
[
楼主
]
2005-11-10 09:02
ttyp
服务器?是服务端吧,直接doc.save(路径)或者用fso保存,客户端得可以读出内容然后post
回复
引用
查看
#18楼
2005-12-06 17:29
ssaasdsdfsf[未注册用户]
sdfsadfsafssdfsdfsafsadffsadfasdfsfsaafsadf
回复
引用
#19楼
2006-02-13 20:29
@@![未注册用户]
我是楼主的儿子
回复
引用
#20楼
2006-03-04 16:10
txzero[未注册用户]
上面的这位仁兄,你怎么这样回复啊。
翻译:我是楼主的儿子
如下:我是楼主的儿子
回复
引用
#21楼
[
楼主
]
2006-03-05 18:05
ttyp
-_-!
回复
引用
查看
#22楼
2006-03-07 16:38
frank1197[未注册用户]
doc.save("tmp.xml");
为什么告诉我语法不对?
回复
引用
#23楼
2006-03-07 16:56
frank1197[未注册用户]
doc.save("tmp.xml");
确认了一下,告诉我的是写入失败。。。。。
回复
引用
#24楼
2006-03-07 17:18
frank1197[未注册用户]
function test()
{
var doc = new ActiveXObject("Msxml2.DOMDocument");
doc.load("tmp.xml");
var p = doc.createProcessingInstruction("xml","version='1.0' encoding='gb2312'");
doc.appendChild(p);
var root = doc.createElement("students");
doc.appendChild(root);
alert(doc.xml);
doc.save("tmp.xml");
}
不晓得为什么老是不让我写入。。。搂住帮忙啊
回复
引用
#25楼
[
楼主
]
2006-03-09 11:10
ttyp
要写全路径,还有就是HTML可能没有权限
回复
引用
查看
#26楼
2006-03-26 15:33
yukun[未注册用户]
请问HTML没有权限修改保存XML文件的问题该如何解决呢?
回复
引用
#27楼
[
楼主
]
2006-03-26 17:14
ttyp
降低IE的安全级别
回复
引用
查看
#28楼
2006-03-27 14:48
yukun[未注册用户]
不好意思,我将安全级别降到最低仍会提示“没有权限”,“自定义安全级别”也找不到相关的选项
回复
引用
#29楼
2006-03-31 18:50
jojo[未注册用户]
感谢楼主的文章!
但是我也无法在服务器上保存这个xml文件,我尝试给出路经,但是还是无法做到,也没有错误的提示。
不知道楼主或者哪位朋友知道如何解决。非常期待。
谢谢
回复
引用
#30楼
[
楼主
]
2006-03-31 20:53
ttyp
是不是你给的路径不对,如果是js路径里\\替代\
回复
引用
查看
#31楼
2006-04-01 23:40
ff[未注册用户]
h
回复
引用
#32楼
2006-07-19 11:00
site120[未注册用户]
针对他们要把xml给保存到服务器上这个问题。
1,这是客户端编程(javascript),不是服务器端编程,所以不能利用xml.save()直接保存到服务器当中。
2, 应该先在客户端,将数据处理好。再通过Ajax 或者 是表单提交 或者是传递参数的方法传到服务端。
3,最后由 服务端的程序(asp , jsp , php , perl....)来处理保存到数据库可以服务器当中。
回复
引用
#33楼
2006-08-05 14:50
hai
doc.load("tmp.xml");
tmp.xml在哪个路径下
请各位高手帮忙
回复
引用
#34楼
2006-08-10 14:16
sailor_hu[未注册用户]
如果不是ie 浏览器,那怎么办?
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
没有作用,会抱错的 请教,谢谢
回复
引用
#35楼
[
楼主
]
2006-08-13 10:15
ttyp
doc = (new DOMParser()).parseFromString(sXML,'text/xml')
回复
引用
查看
#36楼
[
楼主
]
2006-08-13 10:39
ttyp
@hai
最好指定绝对路径
回复
引用
查看
#37楼
2006-08-28 19:25
过客656[未注册用户]
doc.load ("china.xml")
var list = doc.selectNodes("/中国/省[@名称='福建']/城市")
for(var i=0;i<list.length;i++) {
alert(list[i].text);
}
回复
引用
#38楼
2006-08-28 21:48
过客656[未注册用户]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="vs_targetSchema" content="
http://schemas.microsoft.com/intellisense/ie5">
</head>
<body>
<script language=javascript>
<!--
var doc = new ActiveXObject("MSXML2.DOMDocument");
function writeXML()
{
// var doc = new ActiveXObject("Msxml2.DOMDocument");
// doc.load("tmp.xml");
var doc = new ActiveXObject("MSXML2.DOMDocument");
var p = doc.createProcessingInstruction("xml","version='1.0' encoding='gb2312'");
doc.appendChild(p);
var root = doc.createNode(1,"中国","");
doc.appendChild(root);
var elem=doc.createNode(1,"省","");
root.appendChild(elem);
var att=doc.createAttribute("名称");
att.value="福建";
elem.setAttributeNode(att);
var ele1=doc.createNode(1,"城市","");
ele1.text="厦门";
elem.appendChild(ele1);
var ele2=doc.createNode(1,"城市","");
ele2.text="石狮";
elem.appendChild(ele2);
var ele3=doc.createNode(1,"城市","");
ele3.text="晋江";
elem.appendChild(ele3);
var elem=doc.createNode(1,"省","");
root.appendChild(elem);
var att=doc.createAttribute("名称");
att.value="江苏";
elem.setAttributeNode(att);
var elem=doc.createNode(1,"省","");
root.appendChild(elem);
var att=doc.createAttribute("名称");
att.value="安徽";
elem.setAttributeNode(att);
doc.save("china.xml");
}
function readXML(){
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.load ("china.xml")
var list = doc.selectNodes("/中国/省[@名称='福建']/城市")
for(var i=0;i<list.length;i++) {
alert(list[i].text);
}
}
//-->
</script>
<br><br><br><br><br><br>
<center>
<input type=button value="写入XML" onclick="writeXML()" id=button1 name=button1>
<input type=button value="读取XML" onclick="readXML()" id=button2 name=button2>
<center>
</body>
</html>
回复
引用
#39楼
2006-08-28 22:04
过客656[未注册用户]
楼主的创建孙接点,好象还需要三个参数,而楼主的只有一个参数,会报错。
回复
引用
#40楼
[
楼主
]
2006-08-29 08:51
ttyp
你是用的createNode,我是用的createElement
回复
引用
查看
#41楼
2006-09-05 20:11
honghuhuchao[未注册用户]
楼主:我现在保存的xml文件有名字空间,例如:<xs:schema
xmlns:xs="
http://www.w3.org/2001/XMLSchema"
targetNamespace="
http://wr.example.com/2004/schemas/resSvc"
xmlns="
http://wr.example.com/2004/schemas/resSvc"
>:</xs:schema>
我使用 var schema = doc.createNode(1,"xs:schema","");
提示未声明的名称空间前缀:“xs”引用,我用 var schema = doc.createNode(1,"schema","xs");这种方式也不行(csdn)。请问有没有方法实现啊?(我写的是wsdl)
回复
引用
#42楼
[
楼主
]
2006-09-05 21:19
ttyp
createNode 方法
作 用
建立一个指定型态、名称,及命名空间的新节点。
基本语法
xmlDocument.createNode(type, name, nameSpaceURI);
说 明
type 用来确认要被建立的节点型态,name 是一个字符串来确认新节点的名称,命名空间的前缀则是选择性的。nameSpaceURI 是一个定义命名空间URI 的字符串。如果前缀被包含在名称参数中,此节点会在nameSpaceURI 的内文中以指定的前缀建立。如果不包含前缀,指定的命名空间会被视为预设的命名空间。
var schema = doc.createNode(1,"schema","xs");
结果是<schema xmlns="xs"></schema>
或者你使用
var schema = doc.createNode(1,"xs:schema","你的命名空间");
回复
引用
查看
#43楼
2006-09-05 21:25
honghuhuchao[未注册用户]
那我现在想要的结果是<xs:schema ></schema>的形式,用第二中方式可以吗?我没有定义自己的名字空间,使用的是默认的。怎么实现啊?看了msdn上的方法,也就是你的第一种方法。实现不了
回复
引用
#44楼
2006-09-05 21:32
honghuhuchao[未注册用户]
谢谢楼主,我已经可以实现了。使用的是你的第一种的方法。
var schema = doc.createNode(1,"xs:schema","
http://www.w3.org/2001/XMLSchema"
); 已经ok了,出来的结果就是<xs:schema ></schema>这个样子的。一语点醒梦中人啊!呵呵
回复
引用
#45楼
2006-09-05 22:21
honghuhuchao[未注册用户]
楼主在麻烦你一下啊,我现在要生成<xs:element name="StretchDrain_Data" type="tStretchDrain_Data"/>这个节点应该怎么实现啊?我用createDocumentFragment()可以生成<xs:element/>这样的形式,但是用setAttributeNode()添加不了属性节点。应该怎么实现啊?谢谢。
回复
引用
#46楼
2006-09-06 09:41
honghuhuchao[未注册用户]
问题我以解决,有问题在麻烦你啊!谢谢楼主
回复
引用
#47楼
2008-07-02 22:52
macleo
真是牛人...2004年就发现ajax了...比老外早了多少?
太牛叉了
回复
引用
查看
#48楼
2008-09-04 14:38
汉城
收藏
回复
引用
查看
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
Android平台发现新型手机病毒Rootsmart
·
HTC首款Android4.0手机大曝光
·
这是不是你期待的 iPad 3?
·
瑞士公司对苹果提起新专利权诉讼
·
微软看重平板市场:ARM版Win8与x86版同步推
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
<
2004年11月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
公告
昵称:
ttyp
园龄:
7年7个月
粉丝:
10
关注:
0
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔分类
(40)
ASP.NET(11)
(rss)
ERP
(rss)
Visual Basic(2)
(rss)
安全
(rss)
脚本(27)
(rss)
软件架构
(rss)
项目管理
(rss)
随笔档案
(51)
2009年4月 (4)
2007年9月 (2)
2007年7月 (2)
2007年5月 (1)
2007年1月 (1)
2006年11月 (1)
2006年9月 (2)
2006年5月 (1)
2006年4月 (1)
2006年3月 (1)
2005年12月 (2)
2005年11月 (1)
2005年10月 (1)
2005年8月 (1)
2005年7月 (3)
2005年6月 (3)
2005年5月 (2)
2005年4月 (1)
2005年3月 (6)
2005年2月 (1)
2005年1月 (4)
2004年11月 (2)
2004年10月 (1)
2004年9月 (1)
2004年8月 (6)
文章分类
(11)
非技术(11)
(rss)
技术
(rss)
文章档案
(17)
2009年1月 (1)
2005年8月 (1)
2005年6月 (11)
2005年4月 (4)
相册
示例图片
Blog
网络虫虫
CC
AJAX
dotMsn
itpub
log4net
msn协议
NUnit
sharpdevelop
sourceforge
Sqlite
xml.org.cn
脚本学习
软件架构
三库四平台
图标集中营
无忧脚本
系统分析员
正则库
中国ui
中国标准xml
Visual Basic
21code
freevbcode
planet-source-code
其他
百姓厨房
江西搜才网
全采用EXT的富客户端架构,操作方便,界面整洁,速度超快
积分与排名
积分 - 396819
排名 - 159
最新评论
阅读排行榜
评论排行榜
推荐排行榜