php xml 格式化,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、付费专栏及课程。

余额充值