2008-11-15 11 views

Répondre

5

Pour ce genre de tâche, la lecture du document en DomDocument et en utilisant DomXPath est probablement plus approprié.

Pour répondre à votre question, les deux bibliothèques (ainsi que DomDocument + DomXPath) sont une tenue standard avec PHP5, donc elles seraient tout aussi bien choisies.

+0

Je recommanderais spécifiquement la méthode de fichier LoadHTML comme un bon point de départ car il a été conçu pour fonctionner avec ceci et ne sera pas confondu avec les sous-étiquettes. http://us3.php.net/manual/fr/domdocument.loadhtml.php – preinheimer

+1

Puisqu'il s'agit de XML et non de HTML, loadXml serait plus approprié: http://docs.php.net/manual/fr/domdocument .loadxml.php – troelskn

0

SimpleXML a été introduit en PHP5 alors que XmlReader n'a été inclus par défaut dans la version 5.1, de sorte que le premier est probablement la meilleure façon d'aller:

$struct = simplexml_load_string($xml); 
$version = (string)$struct->project->latest_release->latest_release_version; 

Toutefois, si vous ne faites aucun autre traitement XML et veulent maximiser la compatibilité vous pouvez simplement regex XML:

if(preg_match('/<latest_release_version>(.*?)<\\/latest_release_version>/', $xml, $matches)){ 
$version = $matches[1]; 
} 

Il est messier que le traitement du XML correctement, mais est probablement plus rapide et soutenu par la quasi-totalité des installations PHP.

3

Il doit s'agir de SimpleXML. Il is enabled by default, est plus rapide pour charger des documents XML que les méthodes Dom, a un plus petit pied-print de mémoire que les méthodes Dom, et a beaucoup plus simple xpath methods que les méthodes Dom:

$xml = simplexml_load_file(
    'http://freshmeat.net/projects-xml/mysql/mysql.xml?branch_id=46519' 
    ); 
$result = $xml->xpath('//latest_release/latest_release_version'); 
// or '//latest_release/*' if you'd rather loop through all release information. 

while(list(, $node) = each($result)) 
    echo $node, "\n"; 
1

Pour les gros fichiers utiliser xmlreader, simpleXML consommera toute la mémoire sur les gros fichiers.

Questions connexes