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;
}



你可能感兴趣的:(PHP)