首页 后端开发 php教程 PHPl使用DOM XML操作XML[总结]_PHP教程

PHPl使用DOM XML操作XML[总结]_PHP教程

Jul 13, 2016 am 10:37 AM
使用 操作

1、前言

 
  XML树状层次结构鲜明,非常适合作为配置文件。PHP中可以使用DOM XML来操作XML。本文总结一下PHP使用DOM XML创建、添加节点、查询XML文件。
 
2、使用DOM XML
 
  XML中节点分为元素和文本,DOMDocument类型是文档类型,提供了操作元素和文本的成员函数和属性。
 
DOMDocument类如下:
 
复制代码
DOMDocument extends DOMNode {
/* Properties */
readonly public string $actualEncoding ;
readonly public DOMConfiguration $config ;
readonly public DOMDocumentType $doctype ;
readonly public DOMElement $documentElement ;
public string $documentURI ;
public string $encoding ;
public bool $formatOutput ;
readonly public DOMImplementation $implementation ;
public bool $preserveWhiteSpace =true ;
public bool $recover ;
public bool $resolveExternals ;
public bool $standalone ;
public bool $strictErrorChecking =true ;
public bool $substituteEntities ;
public bool $validateOnParse =false ;
public string $version ;
readonly public string $xmlEncoding ;
public bool $xmlStandalone ;
public string $xmlVersion ;
/* Methods */
__construct ([ string $version [, string $encoding ]] )
DOMAttr createAttribute ( string $name )
DOMAttr createAttributeNS ( string $namespaceURI , string $qualifiedName )
DOMCDATASection createCDATASection ( string $data )
DOMComment createComment ( string $data )
DOMDocumentFragment createDocumentFragment ( void )
DOMElement createElement ( string $name [, string $value ] )
DOMElement createElementNS ( string $namespaceURI , string $qualifiedName [, string $value ] )
DOMEntityReference createEntityReference ( string $name )
DOMProcessingInstruction createProcessingInstruction ( string $target [, string $data ] )
DOMText createTextNode ( string $content )
DOMElement getElementById ( string $elementId )
DOMNodeList getElementsByTagName ( string $name )
DOMNodeList getElementsByTagNameNS ( string $namespaceURI , string $localName )
DOMNode importNode ( DOMNode $importedNode [, bool $deep ] )
mixed load ( string $filename [, int $options=0 ] )
bool loadHTML ( string $source )
bool loadHTMLFile ( string $filename )
mixed loadXML ( string $source [, int $options=0 ] )
void normalizeDocument ( void )
bool registerNodeClass ( string $baseclass , string $extendedclass )
bool relaxNGValidate ( string $filename )
bool relaxNGValidateSource ( string $source )
int save ( string $filename [, int $options ] )
string saveHTML ( void )
int saveHTMLFile ( string $filename )
string saveXML ([ DOMNode $node [, int $options ]] )
bool schemaValidate ( string $filename )
bool schemaValidateSource ( string $source )
bool validate ( void )
int xinclude ([ int $options ] )
/* Inherited methods */
DOMNode DOMNode::appendChild ( DOMNode $newnode )
DOMNode DOMNode::cloneNode ([ bool $deep ] )
bool DOMNode::hasAttributes ( void )
bool DOMNode::hasChildNodes ( void )
DOMNode DOMNode::insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
bool DOMNode::isDefaultNamespace ( string $namespaceURI )
bool DOMNode::isSameNode ( DOMNode $node )
bool DOMNode::isSupported ( string $feature , string $version )
string DOMNode::lookupNamespaceURI ( string $prefix )
string DOMNode::lookupPrefix ( string $namespaceURI )
void DOMNode::normalize ( void )
DOMNode DOMNode::removeChild ( DOMNode $oldnode )
DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
}
复制代码
元素节点类DOMElement类型定义如下:
 
复制代码
 1 DOMElement extends DOMNode {
 2 /* Properties */
 3 readonly public bool $schemaTypeInfo ;
 4 readonly public string $tagName ;
 5 /* Methods */
 6 __construct ( string $name [, string $value [, string $namespaceURI ]] )
 7 string getAttribute ( string $name )
 8 DOMAttr getAttributeNode ( string $name )
 9 DOMAttr getAttributeNodeNS ( string $namespaceURI , string $localName )
10 string getAttributeNS ( string $namespaceURI , string $localName )
11 DOMNodeList getElementsByTagName ( string $name )
12 DOMNodeList getElementsByTagNameNS ( string $namespaceURI , string $localName )
13 bool hasAttribute ( string $name )
14 bool hasAttributeNS ( string $namespaceURI , string $localName )
15 bool removeAttribute ( string $name )
16 bool removeAttributeNode ( DOMAttr $oldnode )
17 bool removeAttributeNS ( string $namespaceURI , string $localName )
18 DOMAttr setAttribute ( string $name , string $value )
19 DOMAttr setAttributeNode ( DOMAttr $attr )
20 DOMAttr setAttributeNodeNS ( DOMAttr $attr )
21 void setAttributeNS ( string $namespaceURI , string $qualifiedName , string $value )
22 void setIdAttribute ( string $name , bool $isId )
23 void setIdAttributeNode ( DOMAttr $attr , bool $isId )
24 void setIdAttributeNS ( string $namespaceURI , string $localName , bool $isId )
25 /* Inherited methods */
26 DOMNode DOMNode::appendChild ( DOMNode $newnode )
27 DOMNode DOMNode::cloneNode ([ bool $deep ] )
28 bool DOMNode::hasAttributes ( void )
29 bool DOMNode::hasChildNodes ( void )
30 DOMNode DOMNode::insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
31 bool DOMNode::isDefaultNamespace ( string $namespaceURI )
32 bool DOMNode::isSameNode ( DOMNode $node )
33 bool DOMNode::isSupported ( string $feature , string $version )
34 string DOMNode::lookupNamespaceURI ( string $prefix )
35 string DOMNode::lookupPrefix ( string $namespaceURI )
36 void DOMNode::normalize ( void )
37 DOMNode DOMNode::removeChild ( DOMNode $oldnode )
38 DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
39 }
复制代码
文本类型DOMText定义如下:
 
复制代码
DOMText extends DOMCharacterData {
/* Properties */
readonly public string $wholeText ;
/* Methods */
__construct ([ string $value ] )
bool isWhitespaceInElementContent ( void )
DOMText splitText ( int $offset )
/* Inherited methods */
void DOMCharacterData::appendData ( string $data )
void DOMCharacterData::deleteData ( int $offset , int $count )
void DOMCharacterData::insertData ( int $offset , string $data )
void DOMCharacterData::replaceData ( int $offset , int $count , string $data )
string DOMCharacterData::substringData ( int $offset , int $count )
}
复制代码
DOMNode节点定义如下:
 
复制代码
DOMNode {
/* Properties */
public readonly string $nodeName ;
public string $nodeValue ;
public readonly int $nodeType ;
public readonly DOMNode $parentNode ;
public readonly DOMNodeList $childNodes ;
public readonly DOMNode $firstChild ;
public readonly DOMNode $lastChild ;
public readonly DOMNode $previousSibling ;
public readonly DOMNode $nextSibling ;
public readonly DOMNamedNodeMap $attributes ;
public readonly DOMDocument $ownerDocument ;
public readonly string $namespaceURI ;
public string $prefix ;
public readonly string $localName ;
public readonly string $baseURI ;
public string $textContent ;
/* Methods */
DOMNode appendChild ( DOMNode $newnode )
DOMNode cloneNode ([ bool $deep ] )
bool hasAttributes ( void )
bool hasChildNodes ( void )
DOMNode insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
bool isDefaultNamespace ( string $namespaceURI )
bool isSameNode ( DOMNode $node )
bool isSupported ( string $feature , string $version )
string lookupNamespaceURI ( string $prefix )
string lookupPrefix ( string $namespaceURI )
void normalize ( void )
DOMNode removeChild ( DOMNode $oldnode )
DOMNode replaceChild ( DOMNode $newnode , DOMNode $oldnode )
}
复制代码
3、测试程序
 
复制代码
  1
  2 
  3 const INDEX_FILE_NAME = "student_file_index.xml";
  4 
  5 //文件索引类
  6 class file_index
  7 {
  8   public function set_file_index($file_name, $cur_count, $total_count)
  9   {
 10     $this->file_name = $file_name;
 11     $this->cur_count = $cur_count;
 12     $this->total_count = $total_count;
 13   }
 14   public function get_file_name()
 15   {
 16     return $this->file_name;
 17   }
 18   public function get_cur_count()
 19   {
 20     return $this->cur_count;
 21   }
 22   public function get_total_count()
 23   {
 24     return $this->total_count;
 25   }
 26 
 27   private $file_name;  //文件名
 28   private $cur_count;  //当前记录数
 29   private $total_count; //总记录数
 30 }
 31 
 32 function create_file_index(array $params)
 33 {
 34   $index = new file_index();
 35   $index->set_file_index($params['file_name'], 
 36       $params['cur_count'], $params['total_count']);
 37   return $index;
 38 }
 39 
 40 function create_file_node(DOMDocument $doc, file_index $index)
 41 {
 42   //创建一个file元素
 43   $file = $doc->createElement("file");
 44   //创建一个属性元素
 45   $name_attr = $doc->createAttribute("name");
 46   //将该属性添加到file元素上
 47   $file->appendChild($name_attr);
 48 
 49   //创建一个文本元素
 50   $file_name = $doc->createTextNode($index->get_file_name());
 51   //将文本元素添加name_attr属性上
 52   $name_attr->appendChild($file_name);
 53 
 54   //创建一个cur_count元素
 55   $cur_count = $doc->createElement("cur_count", strval($index->get_cur_count()));
 56   //将cur_count添加到file元素下
 57   $cur_count = $file->appendChild($cur_count);
 58 
 59   //创建一个total_count元素
 60   $total_count = $doc->createElement("total_count",
 61       strval($index->get_total_count()));
 62   //将total_count添加到file元素下
 63   $total_count = $file->appendChild($total_count);
 64 
 65   return $file;
 66 }
 67 
 68 function create_index_file($index_file_name, array $params)
 69 {
 70   //创建一个文档
 71   $doc = new DOMDocument("1.0", "utf-8");
 72   //创建根元素
 73   $root = $doc->createElement("index");
 74   $root = $doc->appendChild($root);
 75 
 76   //创建一个索引结构
 77   $index = create_file_index($params);
 78   $file = create_file_node($doc, $index);
 79 
 80   //将file看到根元素下 
 81   $root->appendChild($file);
 82   $doc->save($index_file_name);
 83   return true;    
 84 }
 85 
 86 function add_index_file($index_file_name, array $params)
 87 {
 88   //创建一个文档
 89   $doc = new DOMDocument();
 90   //加载xml文件
 91   $doc->load($index_file_name);
 92   //获取index元素列表
 93   $node_list = $doc->getElementsByTagName('index');
 94   //获取根元素
 95   $root = $node_list->item(0);
 96   //创建一个索引结构
 97   $index = create_file_index($params);
 98   $file = create_file_node($doc, $index);
 99   //将file看到根元素下 
100   $root->appendChild($file);
101   $doc->save($index_file_name);
102 }
103 
104 function traverse_file_index($index_file_name)
105 {
106   $file_index = array();
107   $doc = new DOMDocument();
108   $doc->load($index_file_name);
109   //获取file元素集合
110   $file_list = $doc->getElementsByTagName('file');
111   //获取cur_count元素集合
112   $cur_count_list = $doc->getElementsByTagName('cur_count');
113   //获取total_count元素集合
114   $total_count_list = $doc->getElementsByTagName('total_count');
115   for ($i = 0; $i length; $i++) {
116     $index = new file_index();
117     //获取file元素的name属性值
118     $file_name = $file_list->item($i)->attributes->getNamedItem("name")->nodeValue;
119     $index->set_file_index($file_name, $cur_count_list->item($i)->nodeValue,
120         $total_count_list->item($i)->nodeValue);
121     $file_index[$i] = $index;
122   }
123 
124   return $file_index;
125 }
126 
127 /*****************for test*********************/
128 $params = array();
129 $index_file_name = INDEX_FILE_NAME;
130 
131 if (file_exists($index_file_name)) {
132   $params['file_name'] = "student_info_2014_02_12";
133   $params['cur_count'] = 10;
134   $params['total_count'] = 10;
135   echo "Add index to file.\n";
136   add_index_file($index_file_name, $params);
137 }
138 else {
139   $params['file_name'] = "student_info_2014_02_11";
140   $params['cur_count'] = 23;
141   $params['total_count'] = 33;
142   echo "Create index file.\n";
143   create_index_file($index_file_name, $params);
144 }
145 
146 //测试读取xm文件
147 echo "Read index content from ".$index_file_name."\n";
148 echo "file_name\t\t\tcur_count\ttotal_count.\n";
149 $file_index = traverse_file_index($index_file_name);
150 foreach($file_index as $index) {
151   echo $index->get_file_name();
152   echo "\t\t  ";
153   echo $index->get_cur_count();
154   echo strval($cur_count);
155   echo "\t\t  ";
156   echo $index->get_total_count();
157   echo "\n";
158 }

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/735885.htmlTechArticle1、前言 XML树状层次结构鲜明,非常适合作为配置文件。PHP中可以使用DOM XML来操作XML。本文总结一下PHP使用DOM XML创建、添加节点、查询XML文...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

crystaldiskmark是什么软件?-crystaldiskmark如何使用? crystaldiskmark是什么软件?-crystaldiskmark如何使用? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark是一款适用于硬盘的小型HDD基准测试工具,可以快速测量顺序和随机读/写速度。接下来就让小编为大家介绍一下CrystalDiskMark,以及crystaldiskmark如何使用吧~一、CrystalDiskMark介绍CrystalDiskMark是一款广泛使用的磁盘性能测试工具,用于评估机械硬盘和固态硬盘(SSD)的读写速度和随机I/O性能。它是一款免费的Windows应用程序,并提供用户友好的界面和各种测试模式来评估硬盘驱动器性能的不同方面,并被广泛用于硬件评

PyCharm使用教程:详细指引你运行操作 PyCharm使用教程:详细指引你运行操作 Feb 26, 2024 pm 05:51 PM

PyCharm是一款非常流行的Python集成开发环境(IDE),它提供了丰富的功能和工具,使得Python开发变得更加高效和便捷。本文将为大家介绍PyCharm的基本操作方法,并提供具体的代码示例,帮助读者快速入门并熟练操作该工具。1.下载和安装PyCharm首先,我们需要前往PyCharm官网(https://www.jetbrains.com/pyc

foobar2000怎么下载?-foobar2000怎么使用 foobar2000怎么下载?-foobar2000怎么使用 Mar 18, 2024 am 10:58 AM

foobar2000是一款能随时收听音乐资源的软件,各种音乐无损音质带给你,增强版本的音乐播放器,让你得到更全更舒适的音乐体验,它的设计理念是将电脑端的高级音频播放器移植到手机上,提供更加便捷高效的音乐播放体验,界面设计简洁明了易于使用它采用了极简的设计风格,没有过多的装饰和繁琐的操作能够快速上手,同时还支持多种皮肤和主题,根据自己的喜好进行个性化设置,打造专属的音乐播放器支持多种音频格式的播放,它还支持音频增益功能根据自己的听力情况调整音量大小,避免过大的音量对听力造成损害。接下来就让小编为大

网易邮箱大师怎么用 网易邮箱大师怎么用 Mar 27, 2024 pm 05:32 PM

网易邮箱,作为中国网民广泛使用的一种电子邮箱,一直以来以其稳定、高效的服务赢得了用户的信赖。而网易邮箱大师,则是专为手机用户打造的邮箱软件,它极大地简化了邮件的收发流程,让我们的邮件处理变得更加便捷。那么网易邮箱大师该如何使用,具体又有哪些功能呢,下文中本站小编将为大家带来详细的内容介绍,希望能帮助到大家!首先,您可以在手机应用商店搜索并下载网易邮箱大师应用。在应用宝或百度手机助手中搜索“网易邮箱大师”,然后按照提示进行安装即可。下载安装完成后,我们打开网易邮箱账号并进行登录,登录界面如下图所示

百度网盘app怎么用 百度网盘app怎么用 Mar 27, 2024 pm 06:46 PM

在如今云存储已经成为我们日常生活和工作中不可或缺的一部分。百度网盘作为国内领先的云存储服务之一,凭借其强大的存储功能、高效的传输速度以及便捷的操作体验,赢得了广大用户的青睐。而且无论你是想要备份重要文件、分享资料,还是在线观看视频、听取音乐,百度网盘都能满足你的需求。但是很多用户们可能对百度网盘app的具体使用方法还不了解,那么这篇教程就将为大家详细介绍百度网盘app如何使用,还有疑惑的用户们就快来跟着本文详细了解一下吧!百度云网盘怎么用:一、安装首先,下载并安装百度云软件时,请选择自定义安装选

BTCC教学:如何在BTCC交易所绑定使用MetaMask钱包? BTCC教学:如何在BTCC交易所绑定使用MetaMask钱包? Apr 26, 2024 am 09:40 AM

MetaMask(中文也叫小狐狸钱包)是一款免费的、广受好评的加密钱包软件。目前,BTCC已支持绑定MetaMask钱包,绑定后可使用MetaMask钱包进行快速登入,储值、买币等,且首次绑定还可获得20USDT体验金。在BTCCMetaMask钱包教学中,我们将详细介绍如何注册和使用MetaMask,以及如何在BTCC绑定并使用小狐狸钱包。MetaMask钱包是什么?MetaMask小狐狸钱包拥有超过3,000万用户,是当今最受欢迎的加密货币钱包之一。它可免费​​使用,可作为扩充功能安装在网络

教你使用 iOS 17.4「失窃设备保护」新进阶功能 教你使用 iOS 17.4「失窃设备保护」新进阶功能 Mar 10, 2024 pm 04:34 PM

Apple在周二推出了iOS17.4更新,为iPhone带来了一系列新功能和修复。这次更新包括了全新的表情符号,同时欧盟用户也能够下载其他应用商店。此外,更新还加强了对iPhone安全性的控制,引入了更多的「失窃设备保护」设置选项,为用户提供更多选择和保障。"iOS17.3首次引入了“失窃设备保护”功能,为用户的敏感资料增加了额外的安全保障。当用户不在家等熟悉地点时,该功能要求用户首次输入生物特征信息,并在一小时后再次输入信息才能访问和更改某些数据,如修改AppleID密码或关闭失窃设备保护功能

Linux Deploy的操作步骤及注意事项 Linux Deploy的操作步骤及注意事项 Mar 14, 2024 pm 03:03 PM

LinuxDeploy的操作步骤及注意事项LinuxDeploy是一款强大的工具,可以帮助用户在Android设备上快速部署各种Linux发行版,让用户能够在移动设备上体验到完整的Linux系统。本文将详细介绍LinuxDeploy的操作步骤以及注意事项,同时提供具体的代码示例,帮助读者更好地使用这一工具。操作步骤:安装LinuxDeploy:首先在

See all articles