当前位置:  开发笔记 > 编程语言 > 正文

PHPl使用DOMXML操作XML[总结]

1、前言XML树状层次结构鲜明,非常适合作为配置文件。PHP中可以使用DOMXML来操作XML。本文总结一下PHP使用DOMXML创建、添加节点、查询XML文件。2、使用DOMXMLXML中节点分为元素和文本,DOMDocumen..."/>
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 <$file_list->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[&#39;file_name&#39;] = "student_info_2014_02_12";
133   $params[&#39;cur_count&#39;] = 10;
134   $params[&#39;total_count&#39;] = 10;
135   echo "Add index to file.\n";
136   add_index_file($index_file_name, $params);
137 }
138 else {
139   $params[&#39;file_name&#39;] = "student_info_2014_02_11";
140   $params[&#39;cur_count&#39;] = 23;
141   $params[&#39;total_count&#39;] = 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 }

推荐阅读
  • 高效批量文件重命名软件
    开发了一款基于Python的高效批量文件重命名软件,并集成了wxWidgets图形用户界面,使用cxfreeze将其打包为独立的可执行文件(exe)。该工具适用于需要频繁处理大量文件的用户,能够显著提高文件管理效率。详细使用说明包含在软件压缩包内。开发环境为Python 2.7和wxWidgets 3.0,运行环境要求兼容Windows系统。 ... [详细]
  • Spring Batch 异常处理与任务限制优化策略 ... [详细]
  • 前端技术实现调用摄像头进行拍照功能
    在公司项目中,为了实现调用摄像头进行拍照的功能,我们深入研究了HTML5的相关技术。尽管Java在许多方面表现出色,但在这一场景下,HTML5的灵活性和易用性更胜一筹。本文将分享具体的代码设计和实现细节,帮助开发者快速掌握这一功能。 ... [详细]
  • wxParse 0.3:微信小程序中的高级 HTML 和 Markdown 富文本解析器,全面支持多级嵌套与 Emoji 表情
    wxParse 0.3 是一款专为微信小程序设计的高级富文本解析器,支持 HTML 和 Markdown 转换为 WXML 可视化格式。该组件不仅能够处理复杂的多级嵌套结构,还全面支持 Emoji 表情,极大地提升了内容展示的多样性和用户体验。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 大数据应用实例:电视收视率分析企业项目实操第二篇
    本文继续探讨大数据在电视收视率分析中的应用,详细介绍了如何在CentOS系统中进行防火墙管理。针对CentOS 6.5及更早版本,提供了具体的命令操作步骤,包括停止防火墙服务和禁用防火墙启动。此外,还深入讨论了这些操作对数据传输和系统安全的影响,为实际项目实施提供了宝贵的技术参考。 ... [详细]
  • Spring Security 认证模块的项目构建与初始化
    本文详细介绍了如何构建和初始化Spring Security认证模块的项目。首先,通过创建一个分布式Maven聚合工程,该工程包含四个模块,分别为core、browser(用于演示)、app等,以构成完整的SeehopeSecurity项目。在项目构建过程中,还涉及日志生成机制,确保能够输出关键信息,便于调试和监控。 ... [详细]
  • 如何在IDEA中安装和配置反编译插件以提高代码审查效率
    在 IntelliJ IDEA 中提升代码审查效率的一种方法是安装和配置反编译插件。首先,进入 IDEA 的设置界面,然后导航到插件管理部分。接下来,搜索 "ideaJad" 插件并进行安装。安装完成后,重启 IDEA 以确保插件生效。这将帮助你在审查二进制文件时更加高效地查看源代码。 ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
  • 优化后的标题:数据网格视图(DataGridView)在应用程序中的高效应用与优化策略
    在应用程序中,数据网格视图(DataGridView)的高效应用与优化策略至关重要。本文探讨了多种优化方法,包括但不限于:1)通过合理的数据绑定提升性能;2)利用虚拟模式处理大量数据,减少内存占用;3)在格式化单元格内容时,推荐使用CellParsing事件,以确保数据的准确性和一致性。此外,还介绍了如何通过自定义列类型和优化渲染过程,进一步提升用户体验和系统响应速度。 ... [详细]
  • 深入解析 OpenCV 2 中 Mat 对象的类型、深度与步长属性
    在OpenCV 2中,`Mat`类作为核心组件,对于图像处理至关重要。本文将深入探讨`Mat`对象的类型、深度与步长属性,这些属性是理解和优化图像操作的基础。通过具体示例,我们将展示如何利用这些属性实现高效的图像缩小功能。此外,还将讨论这些属性在实际应用中的重要性和常见误区,帮助读者更好地掌握`Mat`类的使用方法。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • PHP中处理回车换行符转换的有效方法与技巧
    PHP中处理回车换行符转换的有效方法与技巧 ... [详细]
  • 在ASP.NET MVC项目中,通过实战解决了Ajax请求500错误及多表数据查询的问题。具体而言,将页面分为两个部分,用户点击右侧导航栏时,通过Ajax请求动态加载数据,并在右侧显示相应的页面内容。最初尝试使用Partial Action方法,但遇到了500错误。通过详细排查和调试,最终成功解决了这一问题,并实现了预期功能。此外,还优化了多表数据查询的性能,确保系统的高效运行。 ... [详细]
author-avatar
PFwX代佳佳ZYYTHFQN
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有