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");// 亲,全部讲完了,记得好评呢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值