Bu soru burada zaten bir cevabı var:
PHP'nin available XML extensions bir göz var ve bu bir tartışma için http://devzone.zend.com/article/1713 ve http://devzone.zend.com/article/2387 bkz.
XML Ayrıştırıcı ve SimpleXML arasındaki temel fark, ikinci bir çekme ayrıştırıcı değil olmasıdır. SimpleXML DOM uzantıları üstüne inşa edilmiş ve belleğe tüm XML dosyası yüklemek olacaktır. XMLReader gibi XML Ayrıştırıcı sadece belleğe geçerli düğümü yükleyecektir. Sen Ayrıştırıcı onu karşılaştığında tetiklenen alacak belirli düğümler için eylemciler tanımlayabilirsiniz. Yani hızlı ve belleğe kaydeder. XPath kullanmak mümkün değil varlık ile bunun için ödeme yaparsınız.
Şahsen, ben SimpleXML oldukça bu DOM üzerinden sunduğu ne (dolayısıyla basit) sınırlayıcı buluyorum. Gerçi kolayca DOM ve SimpleXML arasında geçiş yapabilirsiniz, ama genellikle rahatsız ve doğrudan DOM yol gitmeyin. DOM, W3C DOM API bir uygulama, yani örneğin JavaScript, diğer dillerden aşina olabilir.
Bu XML dosyaları ile yapmak için çalışıyoruz ne bağlıdır. Sadece (bir yapılandırma dosyası gibi) XML dosyasını okumak için çalışıyoruz eğer iç içe ArrayObjects tutarı ne oluşturur beri, Wicked Flea SimpleXML öne doğrudur. örneğin değeri $ xml-> root-> çocuk tarafından erişilebilir olacak.
Kullandığınız kapalı muhtemelen en iyi konum XML dosyalarını işlemek için arıyor DOM XML
Bir uzantısı mevcut değilken, bu hızlı ve kolay xml ayrıştırma için yararlı bir işlevdir:
<?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;
}
?>
crxml ayrıştırıcı ayrıştırmak için gerçek bir kolaydır.
Bu sınıf, bir argüman olarak herhangi bir ad ile bir düğüm adını alır bir arama fonksiyonu, var. Bu sınıfı kullanarak bu düğümü erişmek için erişim açıklamada dışarı düğüm ve baskılar için xml arar. Bu sınıf ayrıca xml nesil çok kolay hale getirir.
Eğer bu sınıf indirebilirsiniz
http://freshmeat.net/projects/crxml
veya phpclasses.org gelen
http://www.phpclasses.org/package/6769-PHP-Manipulate-XML-documents-as-array.html