2016-07-22 2 views
0

J'ai ce fichier XML:fichier XML Parse pour la balise spécifique pour obtenir le contenu d'une balise de frères et soeurs

<page> 
     <title>test</title> 
     <text>bla bla</text> 
    </page> 
    <page> 
     <title>another test</title> 
     <text>bla bla</text> 
    </page> 
    <page> 
     <title>hello</title> 
     <text>hello world</text> 
    </page> 

Je veux analyser le fichier (analyseur PHP SAX) pour trouver des pages avec le titre « bonjour » , puis enregistrez le contenu de la balise de texte correspondant .. ce que je l'ai fait jusqu'à présent est la suivante:

$pages = array(); 
    $elements = null; 

    function startElements($parser, $name, $attrs) { 
     global $wiki, $elements; 

     if(!empty($name)) { 
     $elements = $name; 
     } 
    } 

    function endElements($parser, $name) { 
     global $elements; 

     if(!empty($name)) { 
     $elements = null; 
     } 
    } 

    function characterData($parser, $data) { 
     global $pages, $elements; 

     if(!empty($data)) { 
     if ($elements == 'TITLE') { 
      if((preg_match('/Hello/', $data)==1)) 
      { 

       // ... I found the page with the good title, but how to get the following text tag content!! 

      } 
     } 
     } 
    } 

    $parser = xml_parser_create(); 

    xml_set_element_handler($parser, "startElements", "endElements"); 
    xml_set_character_data_handler($parser, "characterData"); 

    if (!($handle = fopen('tmp.xml', "r"))) { 
     die("could not open XML input"); 
    } 

    while($data = fread($handle, 4096)) { 
     xml_parse($parser, $data); 
    } 

Toutes les idées sur la façon d'obtenir le contenu de la balise de texte avec l'étiquette de certains titres? Je pourrais obtenir le résultat dont j'ai besoin en sauvegardant toutes les données dans un tableau .. et ensuite à la recherche !! mais j'aimerais une meilleure solution.

merci.

+0

Est-ce que xml est énorme? – splash58

+0

Pour référence: [Comment analyser et traiter HTML/XML en PHP?] (Http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php – FirstOne

+0

@ splash58 oui, un énorme XML. –

Répondre

0

Ok J'ai trouvé une solution, non basée sur l'analyseur syntaxique SAX comme je le voulais mais toujours adaptée aux fichiers volumineux. C'est en combinant SimpleXML (parser DOM) et XMLReader (parser basé sur les flux). SimpleXML permet un accès facile aux nœuds enfants.

Avec XMLReader, les données sont transmises d'un élément à la fois en utilisant expand(). Avec cette méthode, vous pouvez convertir un noeud transmis par XMLReader à un DOMElement, puis à SimpleXML.

Détails pour combiner les deux peuvent être trouvés ici: http://www.ibm.com/developerworks/library/x-xmlphp2/

J'espère que cela aide quelqu'un d'autre.