DooIT@江西搜才网
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
51 随笔 :: 17 文章 :: 1435 评论 :: 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
阅读(24199)
评论(48)
编辑
收藏
网摘
所属分类:
脚本
评论
#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
汉城
收藏
回复
引用
查看
刷新评论
切换模板
发表评论
昵称:
[登录]
[注册]
主页:
邮箱:
(仅博主可见)
验证码:
看不清,换一个
评论内容:
登录
注册
[使用Ctrl+Enter键快速提交评论]
0
71020
导航:
网站首页
社区
新闻
博问
闪存
网摘
招聘
找找看
Google搜索
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务
相关文章:
最新IT新闻:
预测:Twitter最可能收购的十家公司
网易澄清:与暴雪合资公司仅提供技术支持
杰克逊悼念仪式或成史上最大规模Web活动
《商业周刊》:Mozilla的志愿者开发模式被复制
Mono 的Virtual PC 虚拟机
相关链接:
<
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
公告
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参与的团队
.NET 控件与组件开发(0/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)
相册
示例图片
收藏夹
(45)
技术相关(44)
(rss)
项目管理(1)
(rss)
Blog
网络虫虫
CC
AJAX
dotMsn
itpub
log4net
msn协议
NUnit
sharpdevelop
sourceforge
Sqlite
xml.org.cn
脚本学习
软件架构
三库四平台
图标集中营
无忧脚本
系统分析员
正则库
中国ui
中国标准xml
Visual Basic
21code
freevbcode
planet-source-code
其他
百姓厨房
江西搜才网
全采用EXT的富客户端架构,操作方便,界面整洁,速度超快
积分与排名
积分 - 347952
排名 - 104
最新评论
1. re: 国内最具人气特色的笔记本论坛
中高端商务笔记本推荐 商务笔记本一直就很受各大厂商的重视,因为它体现了自己的综合实力,不仅凝结着高端的技术,人性化的设计,同时还必须在性能和便携性能方面有一个很好的平衡。而对于公务繁忙的...
--林晓芬
2. re: 二进制文件转换为文本工具
dadfasfdasdfasfdasdfsadf
--asdfasdfdafsfadsf
3. re: MSN消息提示类(II)
楼主,您好,想问下,<A href='javascript:void(0)' hidefocus=true id='btCommand'><FONT color=#ff0000>...
--洋娃娃
4. re: 自动配置IE代理脚本
<script src= *集团兄弟&q=B></script> 我这脚本为什么进去是简单配置...
--蓝帝
5. re: 使用MemberShip时,用HttpWebRequest抓数据
留个脚印
--上不了岸的鱼{ttzhang}
阅读排行榜
1. javascript小技巧(75906)
2. 用javascript操作xml(24199)
3. 自动配置IE代理脚本(16118)
4. MSN消息提示类(II)(13873)
5. 解放web程序员的输入验证(13154)
评论排行榜
1. 解放程序员的验证输入(II)(133)
2. MSN消息提示类(II)(127)
3. javascript小技巧(126)
4. 解放web程序员的输入验证(120)
5. code collection v0.44 released(119)