2010-09-02 10 views

Antwort

16

mit simple XML Versuchen Sie, hier ist ein Beispiel:

do.php:

<?php 
$xml_str = file_get_contents('xmlfile.xml'); 
$xml = new SimpleXMLElement($xml_str); 
$items = $xml->xpath('*/item'); 

foreach($items as $item) { 
    echo $item['title'], ': ', $item['description'], "\n"; 
} 

XMLFile.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<xml> 
    <items> 
     <item title="Hello World" description="Hellowing the world.." /> 
     <item title="Hello People" description="greeting people.." /> 
    </items> 
</xml> 
11

Für jene Situationen, in denen SimpleXML ist nicht verfügbar, verwende ich diese Funktion ursprünglich in einem Kommentar zu ph p.net. Es funktioniert gut 99% der Zeit.

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

Wenn Sie mit dem Zend Framework vertraut sind, geben Ihre XML Zend_Config_Xml

gegeben xml wie diese

$myXml = ' 
<?xml version="1.0" ?> 
<top> 
    <var>value</var> 
    <nested> 
    <var>value</var> 
    </nested> 
    <arrayVar> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item>   
    </arrayVar> 
</top>'; 

Sie es thusly zugreifen:

$xml = new Zend_Config_Xml($myXml); 

$var = $xml->var; 
$nestedVar = $xml->nested->var; 
$arrayVar = $xml->arrayVar->toArray(); 

Zend Config XML verwendet simplexml und baut darauf auf, um eine nette Schnittstelle zu geben, die es wirklich einfach macht, zu erreichen der XML-Knoten, den Sie suchen.

Es gibt noch viel mehr im ZF-Handbuch, einschließlich des Zugriffs auf Attribute und einiger anderer wirklich nützlicher Funktionen.

http://framework.zend.com/manual/en/zend.config.adapters.xml.html

Zend Config ist eine der einfachsten Teile von ZF zu verwenden, und (glaube ich), es ist eine eigenständige Komponente, können Sie nur Zend Config und keinen anderen Teil der ZF