首页 > php开发 > php使用dom解析含有中文字符xml文档

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

一般我们直接使用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()函数实现编码转换,防止中文乱码

本文地址:http://www.phprm.com/develop/fs648.html

转载随意,但请附上文章地址:-)

标签:中文字符 dom解析 xml文档

相关文章

发表留言