XML parser

Discussion in 'PHP' started by heks, 19 Mar 2008.

  1. heks

    heks Banned

    Joined:
    24 Aug 2007
    Messages:
    713
    Likes Received:
    95
    Reputations:
    12
    может кому понадобится

    <?php
    function xml2array($elements_string)
    {
    $xml_array = array();
    $elements_regex = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*?)<(\/\s*\1\s*)>)/s';
    $attributes_regex = '/(\w+)=(?:"|\')([^"\']*):)?"|\')/';
    preg_match_all ($elements_regex, $elements_string, $elements_array);
    foreach ( $elements_array[1] as $e_key => $e_value )
    {
    $xml_array[$e_key]["name"] = $e_value;
    if ( ($attributes_string = trim($elements_array[2][$e_key])) )
    {
    preg_match_all($attributes_regex, $attributes_string, $attributes_array);
    foreach ( $attributes_array[1] as $a_key => $a_value )
    {
    $xml_array[$a_key]["attributes"][$a_value] = $attributes_array[2][$a_key];
    }
    }
    if ( ($p = strpos($elements_array[3][$e_key], "<")) > 0 )
    {
    $xml_array[$e_key]["text"] = substr($elements_array[3][$e_key], 0, $p - 1);
    }
    if ( preg_match($elements_regex, $elements_array[3][$e_key]) )
    {
    $xml_array[$e_key]["elements"] = xml2array($elements_array[3][$e_key]);
    }
    else if ( isset($elements_array[3][$e_key]) )
    {
    $xml_array[$e_key]["text"] = $elements_array[3][$e_key];
    }
    $xml_array[$e_key]["closetag"] = $elements_array[4][$e_key];
    }
    return $xml_array;
    }
    $xml = xml2array(file_get_contents("./news.xml"));
    print_r($xml);
    ?>
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252