php实现的XML操作(读取)封装类完整实例


Posted in PHP onFebruary 23, 2017

本文实例讲述了php实现的XML操作(读取)封装类。分享给大家供大家参考,具体如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<CustomizationSetting version='1.0' >
  <!-- 各通用配置信息,作为Settings子节点,方便统一解析 -->
  <!-- AgentSettings 由网页定制生成,默认无次节点-->
  <AgentSettings>
    <!-- 以Setting 作为节点名,考虑扩展时,不需修改客户端接口。 type类型方便网页进行显示控件区分 -->
    <!-- 代理定制类型,默认:Normal。在网页区分语言定制的情况下,以英文、或列表第一种语言的修改为准 -->
    <Setting name='CustomizeType' type='enum'>Normal|DR</Setting>
    <!-- 产品名称,AgentType为DR时,用于获取代理购买地址 -->
    <Setting name='AppName' type='string'>Wondershare Vedio Convertor</Setting>
    <!-- 品牌名称,AgentType为DR时,用于获取代理购买地址 -->
    <Setting name='Publisher' type='string'>Wondershare</Setting>
    <!-- 购买地址生成方式,默认:Customize,由网页生成,默认无次节点 -->
    <Setting name='OrderPageGenType' type='enum'>Customize|Affiliate</Setting>
    <!-- Affiliate ID, OrderPageGenType为Affiliate才有效,默认为空值 -->
    <Setting name='AID' type='string'>143724583</Setting>
    <!-- 启动Affiliat 购买地址启用短链接, OrderPageGenType为Affiliate才有效,默认:0 -->
    <Setting name='UseShortAffiliateOrderLink' type='bool'>0|1</Setting>
    <!-- 定制输出名称 -->
    <Setting name='OutputFileName' type='string'><![CDATA[1464646.mac-transpod-lite_full879.dmg]]></Setting>
  </AgentSettings>
  <!-- 各语言定制信息,作为Languages子节点,方便统一解析, 以及扩展 -->
  <Languages>
    <!-- 语言名称,统一使用CBS后台语言数据规范 -->
    <Language name='English' >
      <Settings>
        <!-- 产品ID,多语言中可被定制 -->
        <Setting name='PID' type='stirng'>11642</Setting>
        <!-- 支持弹出广告,默认:1,最终能否弹广告还取决于网站的设置,这里主要用于关闭的总控制 -->
        <Setting name='EnabelAD' type='bool'>1|0</Setting>
        <!-- 支持升级,默认:1 -->
        <Setting name='EnableUpdate' type='bool'>1|0</Setting>
        <!-- CBS跳转链接类型,只对InstallJumpPage,UninstallJumpPage,RegisterJumpPage,UpdateJumpPage有效,默认:Jump -->
        <Setting name='CBSJumpType' type='enum'>Jump|Hide|Disable</Setting>
        <!-- 支持Tisp消息-->
        <Setting name='TipsEnable' type='bool'>1|0</Setting>
        <!-- 支持弹出产品目录推荐, 默认:1-->
        <Setting name='EnableProductSuit' type='bool'>1|0</Setting>
      </Settings>
      <!-- 链接地址作为URLS子节点,方便统一解析 -->
      <URLS>
        <!-- 不使用'**Page'直接作为节点名称,避免自定义地址的名称与XML节点名称规范冲突,如就数字开头,同时支持网页界面根据不同产品显示链接名称,而且扩展时,而不需修改客户端接口 -->
        <!-- 购买地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <!-- 区分地址类型order, jump, comm, custom方便网页显示归类 -->
        <URL name='OrderPage' type='order' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 安装跳转地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='InstallJumpPage' type='jump' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 卸载跳转地址,Mac产品无此项。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='UninstallJumpPage' type='jump' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 注册跳转地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='RegisterJumpPage' type='jump' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 升级跳转地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='UpdateJumpPage' type='jump' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 公司主页地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='HomePage' type='comm' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 产品主页地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='ProductPage' type='comm' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 支持地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='SupportPage' type='comm' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 联系客服地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='ContactPage' type='comm' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 在线帮助地址。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='HelpOnlinePage' type='comm' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 自定义地址,最多可定义5个。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='3DPage' type='custom' updateReserve='0|1'><![CDATA[http://...]]></URL>
        <!-- 自定义地址,最多可定义5个。属性updateReserve表示产品升级保留定制信息,默认:0, 进入定制页面后,默认修改为1 -->
        <URL name='GPUPage' type='custom' updateReserve='0|1'><![CDATA[http://...]]></URL>
      </URLS>
      <!-- 待扩展信息,在客户端接口中预先处理 -->
    </Language>
    <!-- 产品不支持某种语言,则不需要该<Language>节点 -->
    <Language name='Traditional Chinese(HK)'>
        <!-- 同上 -->
    </Language>
    <Language name='Chinese'>
        <!-- 同上 -->
    </Language>
    <Language name='Portuguese'>
        <!-- 同上 -->
    </Language>
    <Language name='Japanese'>
        <!-- 同上 -->
    </Language>
    <Language name='Korean'>
        <!-- 同上 -->
    </Language>
    <Language name='Hebrew'>
        <!-- 同上 -->
    </Language>
    <Language name='Arabic'>
        <!-- 同上 -->
    </Language>
    <Language name='Spanish'>
        <!-- 同上 -->
    </Language>
    <Language name='Polish'>
        <!-- 同上 -->
    </Language>
    <Language name='German'>
        <!-- 同上 -->
    </Language>
    <Language name='French'>
        <!-- 同上 -->
    </Language>
    <Language name='Italian'>
        <!-- 同上 -->
    </Language>
    <Language name='Spanish(Spain)'>
        <!-- 同上 -->
    </Language>
    <Language name='Spanish(Mexico)'>
        <!-- 同上 -->
    </Language>
    <Language name='Traditional Chinese(TW)'>
        <!-- 同上 -->
    </Language>
    <Language name='Dutch'>
        <!-- 同上 -->
    </Language>
    <Language name='Russian'>
        <!-- 同上 -->
    </Language>
  </Languages>
</CustomizationSetting>

封装了下读取xml操作类:

<?php
/**
 * xml操作基类
 */
class XmlBase {
  public function __construct() {
  }
  /**
   * 加载xml
   * @param string $xml xml路径或xml字符串
   * @param bool $isXmlStr 是否是xml字符串
   */
  protected function _loadXml($xml, $isXmlStr = FALSE) {
    $xmlObj = new DOMDocument();
    if ($isXmlStr) {
      $xmlObj->loadXML($xmlNewStr);
    } else {
      $xmlObj->load($xml);
    }
    return $xmlObj;
  }
  /**
   * 获取某个标签节点
   * @param $parentnode 父节点
   * @param $tagName 标签名 // 不区分大小写
   * @return node 节点对象
   */
  protected function _getNode($parentNode, $tagName) {
    $childNodes = $this->_getNodes($parentNode);
    foreach ($childNodes as $node) {
      $nodeName = strtolower(trim($node->nodeName));
      $tagName = strtolower(trim($tagName));
      if ($nodeName == $tagName) {
        return $node;
      }
    }
    return NULL;
  }
  /**
   * 获取xml子节点
   * @param $parentNode 父节点
   * @param $tagName 子节点标签 // 不区分大小写
   */
  protected function _getNodes($parentNode, $tagName = '') {
    $nodes = array();
    if ($tagName) {
      $nodes = $this->_getSpecialNodes($parentNode, $tagName);
    } else {
      $nodes = $this->_getAllNodes($parentNode);
    }
    return $nodes;
  }
  /**
   * 获取所有的节点
   * @param $parentNode 父节点
   */
  protected function _getAllNodes($parentNode) {
    $nodes = array();
    foreach ($parentNode->childNodes as $node) {
      if ($node->nodeType == 1) {
        $nodes[] = $node;
      }
    }
    return $nodes;
  }
  /**
   * 获取指定标签的节点
   * @param $parentNode 父节点
   * @param $tagName 节点名称
   */
  protected function _getSpecialNodes($parentNode, $tagName) {
    $nodes = array();
    $tagName = strtolower(trim($tagName));
    foreach ($parentNode->childNodes as $node) {
      $nodeName = strtolower(trim($node->nodeName));
      if ($node->nodeType == 1 && $nodeName == $tagName) {
        $nodes[] = $node;
      }
    }
    return $nodes;
  }
  /**
   * 获取节点属性值
   *
   * @param $node 节点对象
   * @param $attrName 节点名字 // 不区分大小写
   */
  protected function _getAttr($node, $attrName) {
    $attrName = strtolower($attrName);
    foreach ($node->attributes as $attr) {
      $nodeName = strtolower($attr->nodeName);
      //$nodeValue = strtolower($attr->nodeValue);
      $nodeType = strtolower($attr->nodeType);
      if ($nodeType == 2 && $nodeName == $attrName) {
        unset($attrName, $nodeName, $nodeType);
        return $attr->nodeValue;
      }
    }
    return '';
  }
}
?>
PHP 相关文章推荐
Wordpress php 分页代码
Oct 21 PHP
PHP计数器的实现代码
Jun 08 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
PHP限制HTML内容中图片必须是本站的方法
Jun 16 PHP
php时间计算相关问题小结
May 09 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 PHP
利用php生成验证码
Feb 23 #PHP
php实现base64图片上传方式实例代码
Feb 22 #PHP
php中实现字符串翻转的方法
Feb 22 #PHP
php生成图片缩略图功能示例
Feb 22 #PHP
php图形jpgraph操作实例分析
Feb 22 #PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 #PHP
php可变长参数处理函数详解
Feb 22 #PHP
You might like
DC动漫人物排行
2020/03/03 欧美动漫
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
详解从Vue-router到html5的pushState
2018/07/21 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
python zip文件 压缩
2008/12/24 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
客户代表自我评价范例
2013/09/24 职场文书
高级销售求职信
2014/02/21 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
在职证明格式样本
2015/06/15 职场文书
运动会100米加油稿
2015/07/21 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python