加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php使用dom剖析含有中文字符xml文档

发布时间:2023-04-13 13:34:28 所属栏目:PHP教程 来源:
导读:一般我们直接使用dom来处理xml文档时如果里面有中文就会把中文转换成乱码了,下面我们通过使用iconv()函数实现编码转换,防止中文乱码.代码如下:

<?php

//读取xml文件

$xmlDoc = new DOMDocument();
一般我们直接使用dom来处理xml文档时如果里面有中文就会把中文转换成乱码了,下面我们通过使用iconv()函数实现编码转换,防止中文乱码.代码如下:
 
<?php  
 
//读取xml文件  
 
$xmlDoc = new DOMDocument();  
 
$xmlDoc->load('http://127.0.0.1/holiday.xml');  
 
//获得该xml文件中的所有年份  
 
$years = $xmlDoc->getElementsByTagName("year");  
 
//对每一个年份进行处理  
 
foreach($years as $year){  
 
//获得具体的年份值  
 
$yearNames = $year->getElementsByTagName("yearName");  
 
$yearName = $yearNames->item(0)->nodeValue;  
 
echo $yearName.'年'.'</br>';  
 
//获得该年份下所有的假日  
 
$holidays = $year->getElementsByTagName("holiday");  
 
//对每一个假日进行处理  
 
foreach($holidays as $holiday){  
 
//获得假日名称  
 
$holidayNames = $holiday->getElementsByTagName("holidayName");  
 
$holidayName = $holidayNames->item(0)->nodeValue;  
 
echo iconv('utf-8','gb2312', $holidayName).': '.'</br>';  
 
//获得假日的具体放假日期  
 
$daysOffs = $holiday->getElementsByTagName("daysOff");  
 
$daysOff = $daysOffs->item(0);  
 
$froms = $daysOff->getElementsByTagName("from");  
 
$from = $froms->item(0)->nodeValue;  
 
$tos = $daysOff->getElementsByTagName("to");  
 
$to = $tos->item(0)->nodeValue;  
 
echo '假期为:'.$from.' 至 '.$to.'</br>';  
 
//获得针对该假日的调休日期  
 
$overTimes = $holiday->getElementsByTagName("overTime");  
 
$overTime = $overTimes->item(0);  
 
$days = $overTime->getElementsByTagName("day");  
 
//通过判断,有调休日期则显示,没有则不显示  
 
if($days->length!=0){  
 
echo '调休日为:';  
 
foreach($days as $day){  
 
echo $day->nodeValue.' ';  
 
}  
 
echo '</br>';  
 
}  
 
echo '</br>';  
 
}  
 
}  
 
?>
 
xml文件代码如下:
 
<?xml version="1.0" encoding="UTF-8"?>  
 
<daysOff-overTime>  
 
<year>  
 
<yearName>2012</yearName>  
 
<holiday>  
 
<holidayName>元旦</holidayName>  
 
<daysOff>  
 
<from>2012-1-1</from>  
 
<to>2012-1-3</to>  
 
</daysOff>  
 
<overTime>  
 
<day>2011-12-31</day>  
 
</overTime>  
 
</holiday>  
 
<holiday>  
 
<holidayName>春节</holidayName>  
 
<daysOff>  
 
<from>2012-1-22</from>  
 
<to>2012-1-28</to>  
 
</daysOff>  
 
<overTime>  
 
<day>2012-1-21</day>  
 
<day>2012-1-29</day>  
 
</overTime>  
 
</holiday>  
 
<holiday>  
 
<holidayName>清明节</holidayName>  
 
<daysOff>  
 
<from>2012-4-2</from>  
 
<to>2012-4-4</to>  
 
</daysOff>  
 
<overTime>  
 
<day>2012-3-31</day>  
 
<day>2012-4-1</day>  
 
</overTime>  
 
</holiday>  
 
<holiday>  
 
<holidayName>劳动节</holidayName>  
 
<daysOff>  
 
<from>2012-4-29</from>  
 
<to>2012-5-1</to>  
 
</daysOff>  
 
<overTime>  
 
<day>2012-4-28</day>  
 
</overTime>  
 
</holiday>  
 
<holiday>  
 
<holidayName>端午节</holidayName>  
 
<daysOff>  
 
<from>2012-6-22</from>  
 
<to>2012-6-24</to>  
 
</daysOff>  
 
<overTime/>  
 
</holiday>  
 
<holiday>  
 
<holidayName>中秋节、国庆节</holidayName>  
 
<daysOff>  
 
<from>2012-9-30</from>  
 
<to>2012-10-7</to>  
 
</daysOff>  
 
<overTime>  
 
<day>2012-9-26</day>  
 
</overTime>  
 
</holiday>  
 
</year>  
 
</daysOff-overTime>
 
设计知识点:
 
1、XML节点循环读取
 
2、用iconv()函数实现编码转换,防止中文乱码
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!