这个问题已经有一个答案在这里:

我已经使用XML Parser之前,即使它的工作好吧,我很不开心与它在一般情况下,这感觉就像我用的是变通办法的事情,应当以基本的功能。

我最近看到因但是我没有尝试过。它是任何简单?什么优点和缺点,这样做既有?任何其他分析程序,你们使用?

有帮助吗?

解决方案

我不得不说 需要的蛋糕,因为它首先是一个扩展,C编写,是非常快。但第二,分析的文件的形式PHP对象。这样你就可以"的查询"喜欢 $root->myElement.

其他提示

看看PHP的 可用XML扩展 看看 http://devzone.zend.com/243/http://devzone.zend.com/1035/ 讨论的那些。

主要的差异之间的XML Parser,因为后者是不是一个拉parser.因是建立在DOM扩展,并将载有XML文件的进入存储器。XML Parser喜欢。只将装载前节点进入存储器。你定义的处理程序特点,将得到触发当的分析程序遇到它。这是速度更快,节省的存储器。你付钱,无法使用XPath。

就个人而言,我找到因相当限制性(因此,简单的)在什么它提供了超过DOM。你可以开关之间DOM和因容易,虽然的,但我通常不打扰去DOM路线。DOM是一个实施W3C DOM API,所以你可能很熟悉的其他语言,例如JavaScript。

这是一个有用的功能用于快速和容易的xml分析时的一种扩展是不可用:

<?php
/**
 * Convert XML to an Array
 *
 * @param string  $XML
 * @return array
 */
function XMLtoArray($XML)
{
    $xml_parser = xml_parser_create();
    xml_parse_into_struct($xml_parser, $XML, $vals);
    xml_parser_free($xml_parser);
    // wyznaczamy tablice z powtarzajacymi sie tagami na tym samym poziomie
    $_tmp='';
    foreach ($vals as $xml_elem) {
        $x_tag=$xml_elem['tag'];
        $x_level=$xml_elem['level'];
        $x_type=$xml_elem['type'];
        if ($x_level!=1 && $x_type == 'close') {
            if (isset($multi_key[$x_tag][$x_level]))
                $multi_key[$x_tag][$x_level]=1;
            else
                $multi_key[$x_tag][$x_level]=0;
        }
        if ($x_level!=1 && $x_type == 'complete') {
            if ($_tmp==$x_tag)
                $multi_key[$x_tag][$x_level]=1;
            $_tmp=$x_tag;
        }
    }
    // jedziemy po tablicy
    foreach ($vals as $xml_elem) {
        $x_tag=$xml_elem['tag'];
        $x_level=$xml_elem['level'];
        $x_type=$xml_elem['type'];
        if ($x_type == 'open')
            $level[$x_level] = $x_tag;
        $start_level = 1;
        $php_stmt = '$xml_array';
        if ($x_type=='close' && $x_level!=1)
            $multi_key[$x_tag][$x_level]++;
        while ($start_level < $x_level) {
            $php_stmt .= '[$level['.$start_level.']]';
            if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level])
                $php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']';
            $start_level++;
        }
        $add='';
        if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) {
            if (!isset($multi_key2[$x_tag][$x_level]))
                $multi_key2[$x_tag][$x_level]=0;
            else
                $multi_key2[$x_tag][$x_level]++;
            $add='['.$multi_key2[$x_tag][$x_level].']';
        }
        if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes', $xml_elem)) {
            if ($x_type == 'open')
                $php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];';
            else
                $php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];';
            eval($php_stmt_main);
        }
        if (array_key_exists('attributes', $xml_elem)) {
            if (isset($xml_elem['value'])) {
                $php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];';
                eval($php_stmt_main);
            }
            foreach ($xml_elem['attributes'] as $key=>$value) {
                $php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[$key] = $value;';
                eval($php_stmt_att);
            }
        }
    }
    return $xml_array;
}
?>

嗨我觉得因是非常有用的。和我使用它 xpath;

$xml = simplexml_load_file("som_xml.xml");

$blocks  = $xml->xpath('//block'); //gets all <block/> tags
$blocks2 = $xml->xpath('//layout/block'); //gets all <block/> which parent are   <layout/>  tags

我用的许多xml配置,这有助于我要分析它们的真快。SimpleXml 是写在上面 C 所以这是非常快。

这取决于你是想用XML文件。如果你只想读XML文件(如配置文件),邪恶的跳蚤是正确的建议因,因为它创造什么样的金额为套ArrayObjects.例如值将可通过$xml->根>的孩子。

如果您想操纵XML文件的你可能是最好的使用 DOM XML

该crxml分析程序是一个真正容易分析器。

这类具有一个搜索功能,这需要一个节点名任何名字空间作为一个参数。它搜索xml节点,并打印出的访问声明访问,节点使用此类。这类也使得xml产生非常容易。

你可以下载这类在

http://freshmeat.net/projects/crxml

或者从phpclasses.org

http://www.phpclasses.org/package/6769-PHP-Manipulate-XML-documents-as-array.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top