2009-05-08 6 views
0

J'ai une situation où j'utilise un analyseur XML pour extraire des données d'une entrée php: //.PHP XML Parser - ignorer les balises imbriquées/filles

Les données envoyées dans les regards comme:

<this>foo</this> 
<that>bar></that> 
<data><dong>zebras</dong><fong>monkeys</fong></data> 

Maintenant, le problème est que parce que le gestionnaire:

$xml_parser = xml_parser_create(); 

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); 
xml_set_element_handler($xml_parser, "startTag", "endTag"); 
xml_set_character_data_handler($xml_parser, "contents"); 

$document = file_get_contents("php://input");     

xml_parse($xml_parser, $document); 

xml_parser_free($xml_parser); 

... est l'interprétation des tags pour moi de déchiffrer le contenu pour faire C'est utile ... Il semble qu'il manque quelque chose au sein de <data>, c'est-à-dire que j'ai besoin de savoir comment je peux l'obtenir pour ignorer les éléments/balises imbriqués/enfants et juste bosh out les données que ce soit.

Répondre

1

WideDonkey, avez-vous pensé à utiliser les DOM à la place? Vous pouvez facilement faire:

$dom = new DOMDocument(); 
$dom->loadXML(file_get_contents('php://input')); 

$data = $dom->getElementsByTagName('data'); 
$data = $data[0]->asXML(); 
0

Je ne sais pas si je comprends bien la question, mais

<?php 
function contents($parser, $data) { 
    echo $data; 
} 

$xml_parser = xml_parser_create(); 
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); 
// xml_set_element_handler($xml_parser, "startTag", "endTag"); 
xml_set_character_data_handler($xml_parser, "contents"); 
// $document = file_get_contents("php://input"); 
$document = '<x><this>foo</this><that>bar</that><data><dong>zebras</dong><fong>monkeys</fong></data></x>'; 
xml_parse($xml_parser, $document); 
xml_parser_free($xml_parser); 

impressions

foobarzebrasmonkeys 
+0

Salut Volkerk, Merci pour la réponse. Ce dont j'ai besoin pour le faire dire foobar zebras singes c'est-à-dire tout le contenu est imprimé, presque comme source, avec des étiquettes. – waxical

0

Ce que je fini par faire a été à l'aide SimpleXML à faire: -

$xml = new SimpleXMLElement($input); 

$whatIwant = $xml->bar->monkeys 

Vous pouvez descendre autant de niveaux que vous le souhaitez, tels que le test

Le $ xml est l'étiquette la plus éloignée.

0

phpQuery vous donne toute la puissance des sélecteurs jQuery enveloppés dans un shell PHP.

phpQuery::newDocumentFileXHTML('my-xhtml.html')->find('p'); 
Questions connexes