php如何解析xml

php解析xml主要有以下几种方式:Xml parser, SimpleXML, XMLReader, DOMDocument。

我主要使用了SimpleXML来进行解析

//获取属性
function get_attrs($xml)
{
    $attrs = array();


    foreach ($xml->attributes() as $key => $val) {
        $key = strval($key);
        $val = strval($val);
        $attrs[$key] = $val;
    }


    return $attrs;
}

//检重
function xml_to_assoc_array($tag_name, $key_name, $filename, $required_fields = array())
{
	$arr = array();
	$fname=CONF_PATH .$filename;
	if(!file_exists($fname)){
		return true;
	}
	$xml = safe_open_xml_file($fname);
	if ($xml === false)
	{
		return $arr;
	}
    
    foreach ($xml->xpath("//".$tag_name) as $name => $child) {
        $attrs = get_attrs($child);
        $key = $attrs[$key_name];


#        if (empty($key)) {
#            continue;
#        }


        if (!empty($key) && array_key_exists($key, $arr)) {
            blame_and_die("解析文件{$filename}时, 发现字段 {$key_name} = {$key} 重复了\r\n");
        }


        $attrs['_xml_'] = $child;


        if (!empty($key_name)) {
            $arr[$key] = $attrs;
        } else {
            $arr[] = $attrs;
        }
    }


    return true;
}

//打开文件
function safe_open_xml_file($filename)
{
    if (!file_exists($filename)) {
        blame_and_die("文件{$filename}不存在!");
    }


    $xml = simplexml_load_file($filename);
    if ($xml === false) {
        echo "解析{$filename}有误!请检查xml格式!错误信息如下:\r\n";
        foreach (libxml_get_errors() as $error) {
            echo "\t", $error->message;
        }
    }


    return $xml;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值