Mailinglisten-Archive |
Hi, On Sun, Jul 01, 2007 at 03:45:33PM +0200, Hendrik Bauer wrote: > > Das gleiche funktioniert auch mit SimpleXML: > > $xml = @simplexml_load_string ($response['body']); > $xml->registerXPathNamespace('D:', 'uri:DAV'); > > Allerdings kann man im Anschluss nicht mit > > foreach ($xml->xpath('//D:response') as $response) { > > } > > arbeiten. Denn mit $response->html kommt man immer noch nicht an die > Elemente. Das seltsame ist zudem, dass $response wie ein loser Knoten > erscheint, ohne Referenz auf Kinder. Will man z.B. $refs = > $response->xpath('//D:href') nutzen bekommt man einen arrays aller > href-Elemente im gesamten Dokument. Ich konnte es zumindest nicht > möglich machen, sich den Baum so durchzuhangeln. Wenn du nur die href Kinder unterhalb eines $response Knotens suchst musst du die // im xpath Query bei $xml->xpath('//D:response' weg lassen, bzw. noch einen '.' davor setzen wenn du alle hrefs von D:response und dessen Kindern haben willst. Beispiele: --------------------------------schnipp----------------------------- <?php $xml = '<?xml version="1.0" encoding="utf-8" ?> <D:response xmlns:D="DAV:"> <D:href>/webdav/</D:href> <D:prop xmlns:R="http://www.foo.bar/boxschema/"> <D:href>/prop-href1/</D:href> <R:author>author1</R:author> </D:prop> <D:href>/webdav2/</D:href> <D:prop xmlns:R="http://www.foo.bar/boxschema/"> <D:href>/prop-href2/</D:href> <R:author>author2</R:author> </D:prop> </D:response>'; $sxml = @simplexml_load_string ($xml); $sxml->registerXPathNamespace('D', 'DAV:'); $sxml->registerXPathNamespace('R:', 'http://www.foo.bar/boxschema/'); // alle direkten href-Kinder von D:response foreach($sxml->xpath('//D:response') as $response) { print_r($response->xpath('D:href')); } // alle href-Kinder von D:response und dessen Kindern foreach($sxml->xpath('//D:response') as $response) { print_r($response->xpath('.//D:href')); } // Alle href-Kinder von D:prop Kindern von D:response foreach($sxml->xpath('//D:response/D:prop') as $prop) { print_r($prop->xpath('./D:href')); } // Werte der R:author Tags der D:prop ausgeben. foreach ($sxml->xpath('//D:prop') as $prop) { $res = $prop->xpath('R:author'); echo $res[0] . "\n"; } ?> --------------------------------schnapp----------------------------- Gruss Jens
php::bar PHP Wiki - Listenarchive