本文实例讲述了php实现的XML操作(读取)封装类。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
<? 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操作类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
<?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程序设计有所帮助。