DooIT@江西搜才网

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  51 随笔 :: 17 文章 :: 1435 评论 :: 28 引用

文中尽量用上所有的操作和属性,以做示范

<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 = "女";

  回复  引用  查看    

为什么无论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">替换成你要得,然后再保存
  回复  引用  查看    

请问在服务器中怎么保存XML的内容,客户端用FSO保存后又怎么传给服务端?上传?
  回复  引用    

#17楼[楼主] 2005-11-10 09:02 ttyp      
服务器?是服务端吧,直接doc.save(路径)或者用fso保存,客户端得可以读出内容然后post
  回复  引用  查看    

sdfsadfsafssdfsdfsafsadffsadfasdfsfsaafsadf
  回复  引用    

#19楼 2006-02-13 20:29 @@![未注册用户]
&#25105&#26159&#27004&#20027&#30340&#20799&#23376
  回复  引用    

#20楼 2006-03-04 16:10 txzero[未注册用户]
上面的这位仁兄,你怎么这样回复啊。
翻译:&#25105&#26159&#27004&#20027&#30340&#20799&#23376
如下:我是楼主的儿子

  回复  引用    

#21楼[楼主] 2006-03-05 18:05 ttyp      
-_-!
  回复  引用  查看    

doc.save("tmp.xml");


为什么告诉我语法不对?

  回复  引用    

doc.save("tmp.xml");


确认了一下,告诉我的是写入失败。。。。。

  回复  引用    

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在哪个路径下
请各位高手帮忙

  回复  引用    

如果不是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
最好指定绝对路径

  回复  引用  查看    

doc.load ("china.xml")

var list = doc.selectNodes("/中国/省[@名称='福建']/城市")
for(var i=0;i<list.length;i++) {
alert(list[i].text);
}

  回复  引用    

<!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>

  回复  引用    

楼主的创建孙接点,好象还需要三个参数,而楼主的只有一个参数,会报错。
  回复  引用    

#40楼[楼主] 2006-08-29 08:51 ttyp      
你是用的createNode,我是用的createElement
  回复  引用  查看    

楼主:我现在保存的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","你的命名空间");



  回复  引用  查看    

那我现在想要的结果是<xs:schema ></schema>的形式,用第二中方式可以吗?我没有定义自己的名字空间,使用的是默认的。怎么实现啊?看了msdn上的方法,也就是你的第一种方法。实现不了
  回复  引用    

谢谢楼主,我已经可以实现了。使用的是你的第一种的方法。
var schema = doc.createNode(1,"xs:schema","http://www.w3.org/2001/XMLSchema"); 已经ok了,出来的结果就是<xs:schema ></schema>这个样子的。一语点醒梦中人啊!呵呵

  回复  引用    

楼主在麻烦你一下啊,我现在要生成<xs:element name="StretchDrain_Data" type="tStretchDrain_Data"/>这个节点应该怎么实现啊?我用createDocumentFragment()可以生成<xs:element/>这样的形式,但是用setAttributeNode()添加不了属性节点。应该怎么实现啊?谢谢。
  回复  引用    

问题我以解决,有问题在麻烦你啊!谢谢楼主
  回复  引用    

#47楼 2008-07-02 22:52 macleo      
真是牛人...2004年就发现ajax了...比老外早了多少?

太牛叉了

  回复  引用  查看    

#48楼 2008-09-04 14:38 汉城      
收藏
  回复  引用  查看    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 71020




相关文章:

相关链接: