php:xml操作(后天堂,PHP:XML操作(后天堂

XML 是一个很实用的东西,存储数据、交换数据都很方便,但如何对 XML 进行基本的操作呢?

对 XML 的操作包括创建 XML 文档,添加、查看、修改、删除数据,操作方法有很多种,可以使用 DOMDocument 类、other、other 等都可以实现,本文介绍的是通过 DOMDocument 类进行操作。

DOMDocument 类

属性类型说明

documentElementDOMElementXML 文档的根节点,允许直接访问文档各个子元素节点

documentURIstringXML 文档的真实物理路径

encodingstringXML 文档的编码方式

formatOutputbool格式化输出,友好地保留缩进和空格

preserveWhiteSpacebool文档保存时保留多余的空格输出

validateOnParsebool解析 XML 文档时是否验证文档格式

方法返回值类型说明

load(xmlfile)int打开一个 xml 文档

save(xmlfile)int保存一个 xml 文档

loadHTMLFILE(htmlfile)int打开一个 html 文档

saveHTMLFILE(htmlfile)int保存一个 html 文档

getElementById(id)DOMNodeList获取拥有指定 ID 的元素节点

getElementsByTagName(tag)DOMNodeList获取指定标签名称的元素节点

createElement(TagName[,Value])DOMElement创建一个元素节点

getAttribute(AttrName)DOMAttr获取一个元素节点的属性

createAttribute(AttrName)DOMAttr创建一个元素节点的属性

setAttribute(AttrName,AttrValue)DOMAttr设置元素节点的属性和值

createTextNode(Value)DOMText创建一个文本内容

appendChild(DOMNode)DOMNode添加一个元素节点

removeChild(DOMNode)DOMNode移除一个元素节点

replaceChild(DOMNode)DOMNode替换一个元素节点

hasAttributes()bool判断一个元素节点是否有属性

hasChildNodes()bool判断一个元素节点是否有子节点

注意:以上的属性和方法只是此类的一部分,比较常用和实用,点此 查看全部 。

创建XML文档

说明:创建XML文档之前必须对XML有所了解,本文不做赘述,请参考相关知识。

PHP:create.php

$XML=new DOMDocument("1.0","utf-8"); // 实例化一个对象,并设置 XML 版本和编码 $XML->formatOutput=true; // 格式化输出,保留缩进 $XML->preservaWhiteSpace=false; // 不保留空格,这个是辅助格式化输出的 $root=$XML->createElement("Languages"); // 创建根节点,有且只能有一个 $lang1=$XML->createElement("Lang","Chinese"); // 创建一个子节点,这是方法一 $lang1->setAttribute("id","1001"); // 设置子节点的属性 $lang2=$XML->createElement("Lang"); // 创建一个子节点,这是方法二 $lang2_text=$XML->createTextNode("English"); // 创建子节点的内容 $lang2_Attr_n=$XML->createAttribute("id"); // 创建子节点的属性名称 $lang2_Attr_v=$XML->createTextNode("1002"); // 创建子节点的属性内容 $lang2_Attr_n->appendChild($lang2_Attr_v); // 将属性内容赋值给属性名称 $lang2->appendChild($lang2_text); // 为创建的空子节点添加内容 $lang2->appendChild($lang2_Attr_n); // 为创建的空子节点添加属性 $root->appendChild($lang1); // 添加子节点,不添加将不能显示 $lang1 $root->appendChild($lang2); // 添加子节点,不添加将不能显示 $lang2 $XML->appendChild($root); // 最重要的一步:将根节点添加到文档里面 $XML->save("language.xml"); // 保存 XML 文档,路径是相对路径

XML:language.xml

Chinese

English

提示:如果不格式化输出,XML 将会显示如下。

ChineseEnglish

读取XML数据

说明:读取 XML 数据是通过获取 XML 中的节点然后再读取里面的内容的方式来实现的,获取节点有两种方法:getElementById() 和 getElementsByTagName()。

①. getElementById()

XML:book.xml(打开)

PHP:read.php

$XML=new DOMDocument("1.0","utf-8"); // 实例化一个对象,并设置 XML 版本和编码 $XML->validateOnParse=true; // 开启验证,DTD 验证文档格式 $XML->load("language.xml"); // 打开一个 XML 文件 $langs=$XML->getElementById("b002"); // 获取 id 为 "b002" 的节点 echo $langs->nodeValue; // 输出 《西游记》

注意!!!!!!这个函数比较特殊,需要注意以下几点:

第一:请仔细看 book.xml,这个文档是含有 DTD(文档类型定义),第 2-5 行,不然函数无法识别 ID。

第二:再次观看 book.xml,元素属性值必须以字母开头,否则此函数会闹情绪出现小错误。

第三:要想使用此函数必须开启 XML 验证,即将参数 validateOnParse 设置为 true 。

②. getElementsByTagName()

XML:language.xml(打开)

PHP:read.php

$XML=new DOMDocument("1.0","utf-8"); // 实例化一个对象,并设置 XML 版本和编码 $XML->load("language.xml"); // 打开一个 XML 文件 $langs=$XML->getElementsByTagName("Lang"); // 通过标签名获取指定的节点集合 $lang=$langs->item(1); // 通过 item() 获取指定节点 echo $lang->nodeValue; // 显示节点的文本内容,English

修改XML数据

说明:修改 XML 数据是通过获取 XML 中的节点然后再对节点赋值的方式来实现的。

XML:media.xml(打开)

PHP:edit.php

$XML=new DOMDocument("1.0","utf-8"); // 实例化一个对象,并设置 XML 版本和编码 $XML->load("language.xml"); // 打开一个 XML 文件 $langs=$XML->getElementsByTagName("Lang"); // 通过标签名获取指定的节点集合 $lang=$langs->item(1); // 通过 item() 获取指定节点 $lang->nodeValue="Japanese"; // 为节点赋值,Japanese $XML->save("language.xml"); // 亲,记得保存

删除XML数据

说明:删除 XML 数据是通过获取 XML 中的节点集合然后再移除子节点的方式来实现的。

注意:在执行删除操作之前,一定得弄清楚一点,只有父节点才能删除子节点,其他的都无法删除。

①. 删除单行嵌套的数据

XML:language.xml(打开)

PHP:delete.php

$XML=new DOMDocument("1.0","utf-8"); // 实例化一个对象,并设置 XML 版本和编码 $XML->load("language.xml"); // 打开一个 XML 文件 $root=$XML->documentElement; // 获取根节点 $parent=$XML->getElementsByTagName("Languages")->item(0); // 获取指定的节点集合的父元素 $langs=$XML->getElementsByTagName("Lang"); // 获取指定的节点集合 $lang=$langs->item(1); // 通过 item() 获取指定节点 // 下面的三行代码用于测试,测试三次,每次只使用其中一行,通过对比来验证结论! $XML->removeChild($lang); // 错误,$XML 不是父节点(删除此行程序会正常) $root->removeChild($lang); // 正确,$root 恰巧是父节点,因为嵌套只有一层 $parent->removeChild($lang); // 正确,$parent 是真正的父节点 $XML->save("language.xml"); // 亲,记得保存 ②. 删除多行嵌套的数据

XML:media.xml(打开)

PHP:delete.php

$XML=new DOMDocument("1.0","utf-8"); // 实例化一个对象,并设置 XML 版本和编码 $XML->load("media.xml"); // 打开一个 XML 文件 $root=$XML->documentElement; // 获取根节点 $parent=$XML->getElementsByTagName("music")->item(0); // 获取指定的节点集合的父元素 $songs=$XML->getElementsByTagName("song"); // 获取指定的节点集合 foreach($songs as $song) // 遍历要操作的整个节点集合 { if($song->getAttribute("id")=="102") // 删除 id 为102的节点 { // 调试四次,每次只使用其中一行! $XML->removeChild($song); // 错误,$XML 不是父节点 $root->removeChild($song); // 错误,$root 不是父节点 $songs->removeChild($song); // 错误,$songs 不是父节点 $parent->removeChild($song); // 正确,$parent 是真正的父节点 } } $XML->save("media.xml"); // 亲,全部讲完了,记得好评呢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值