JS给XML添加子节点并写入数据!

JS给XML添加子节点并写入数据!,第1张

我看后发现有如下问题

1、javascript是一种脚本语言,是有一定安全限制的,不知道你打算通过xmlDoc.save("XmlData/about.xml")把about.xml文件保存到客户端还是服务器端,如果是服务器端那是不可能的,需要自己写activex控件

2、javascript只能 *** 作浏览器内存中的dom对象,另存为xml文件一般是没有意义的

3、如果把xml文件保存到客户端这么做也不好,一般的杀毒软件也许会报为病毒,如果保存到客户端,我以前的办法是用applet数字签名,然后再保存

JavaScript *** 作 XML 需要使用 XML DOM,它和 HTML DOM 很相似。

为什么 innerHTML 等 HTML DOM 属性、方法不能 *** 作 XML?原因很简单,就像 HTML 是 XML 的特殊实例一样,HTML DOM 也是专门优化过的,有的 *** 作只能专用于 HTML。

而  XML DOM 则对于任何 XML 及其子集语言编写的文件都通用,因此它的 *** 作更加原始,步骤也比较复杂。下面举一个例子说明。

假设需要处理的 XML 文件是“example.xml”。

<?xml version="1.0" encoding="UTF-8"?>

<school id="s0">

 <grade id="g0" number="1">

  <!--在这里插入子节点-->

 </grade>

 <grade id="g1" number="2"></grade>

 <grade id="g2" number="3"></grade>

</school>

现在为“<grade id="g0" number="1"></grade>”节点插入一个子节点“<class>Class 101</class>”。注意在 XML 中,“Class 101”这样的单纯文字内容也被视为节点,即文本节点。

下面是 JavaScript 代码(宿主环境为浏览器,因此需要把代码放在一个 HTML 文件中执行)。

//加载 XML 文档的函数(这个函数的具体实现可以忽略)

function loadXMLDoc(xmlFile){

    var xmlDoc

    try{

        //Internet Explorer 可以使用其原生方法加载 XML

        xmlDoc=new ActiveXObject("Microsoft.XMLDOM")

    }catch(e){

        try{

            //Firefox 也有标准方法,但可能造成其他浏览器报错,故省略

            //使用 XMLHttpRequest 替代,适用于大部分浏览器

            var xmlHttp = new XMLHttpRequest() 

            xmlHttp.open("GET",xmlFile,false) 

            xmlHttp.send(null)  

            return xmlHttp.responseXML

        }catch(e){

            return null

        }

    }

    xmlDoc.async=false

    xmlDoc.load(xmlFile)

    return xmlDoc

}

var xml=loadXMLDoc("example.xml") //加载XML文件

var elemC0=xml.createElement("class") //创建一个元素节点

var text0=xml.createTextNode("Class 101") //创建一个文本节点

elemC0.appendChild(text0) //添加文本节点

var elemG0=xml.getElementsByTagName("grade")[0] //获取需插入的父节点

elemG0.appendChild(elemC0) //添加为子节点

假设你的xml为stu.xml

---------------那么--------------

$doc = new DOMDocument()

$doc->load( 'stu.xml' )

$students = $doc->getElementsByTagName( "xuesheng" )

foreach($students as $stu){

$yuwen = $stu->getElementsByTagName( "yuwen" )->item(0)->nodeValue

$shuxue = $stu->getElementsByTagName( "shuxue" )->item(0)->nodeValue

$yingyu = $stu->getElementsByTagName( "yingyu" )->item(0)->nodeValue

$zongfen = $stu->getElementsByTagName( "zongfen" )->item(0)->nodeValue

if($zongfen){

echo "节点已经存在了,不再添加!"

continue

}

$zongfen = $yuwen+$shuxue+$yingyu

$newNode = $doc->createElement("zongfen",$zongfen)

$stu->appendChild($newNode)

}

echo $result = $doc->saveXML()

file_put_contents("stu.xml",$result) //这句其实是不需要加上的- - 但是我也不晓得为什么save不了,就加了这句~

希望对你有用哦~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11638352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存