2009-05-08 11 views
0

Ich habe eine Situation, in der ich einen XML-Parser verwende, um Daten von einem php: // - Eingang zu extrahieren.PHP XML Parser - ignorierte verschachtelte/untergeordnete Tags

Die Daten in aussieht gesendet werden:

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

Nun ist das Problem, dass, da der Handler:

$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); 

... interpretiert Tags für mich, den Inhalt zu entschlüsseln, machen es ist nützlich ... Es scheint etwas zu fehlen innerhalb <data> dh ich muss herausfinden, wie ich es bekommen kann, um die Kind/verschachtelte Elemente/Tags zu ignorieren und nur die Daten was auch immer.

Antwort

1

WideDonkey, haben Sie darüber nachgedacht, anstatt das DOM? Sie können ganz einfach tun:

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

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

Ich bin mir nicht sicher, ob ich die Frage richtig verstanden habe, aber

<?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); 

druckt

foobarzebrasmonkeys 
+0

Hallo VolkerK, Vielen Dank für die Antwort. Was ich brauche es zu tun, sagen es foobar Zebras Affen d. H. Innerhalb alle Inhalte wird gedruckt, fast als Quelle, mit Tags. – waxical

0

Was ich am Ende tun SimpleXML wurde mit tun: -

$xml = new SimpleXMLElement($input); 

$whatIwant = $xml->bar->monkeys 

Sie können beliebig viele Ebenen nach unten gehen, wie Sie so wollen, als Test

Die $ xml ist das am weitesten entfernte Wrapper-Tag.

0

phpQuery bietet Ihnen alle Möglichkeiten von jQuery Selectors in einer PHP-Shell.

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