Quiero acceder a nodos internos de un xml, y por lo que he leído la instrucción Xpath de SimpleXMLElement sirve para eso, el detalle es que tengo un ejemplo y funciona adecuadamente:
Esta es la estructura para el ejemplo:
Código XML:
Ver original
<?php $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> <movies> <movie> <id>1</id> <title>PHP: Behind the Parser</title> <characters> <character> <name>Ms. Coder</name> <actor>Onlivia Actora</actor> </character> <character> <name>Mr. Coder</name> <actor>El ActÓr</actor> </character> </characters> <plot> So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary. </plot> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> <movie> <id>2</id> <title>PHP: Behind the Parser</title> <characters> <character> <name>Ms. Coder</name> <actor>Onlivia Actora</actor> </character> <character> <name>Mr. Coder</name> <actor>El ActÓr</actor> </character> </characters> <plot> So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary. </plot> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> </movies> XML; ?>
Este es el código donde se aplica la instrucción Xpath:
Código PHP:
Ver original
<?php include 'ejemplo.php'; foreach ($xml->xpath('//character') as $itemcharacter) { echo $itemcharacter->name, 'played by ', $itemcharacter->actor, '<br />'; } ?>
Cuando lo quiero aplicar a mi estructura XML, no funciona, no muestra nada, se queda en blanco.
la estructura del XML es:
Código XML:
Ver original
<?xml version="1.0" encoding="utf-8" ?> <QuoteHotels xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/xml/enginexml_agencies"> <hotels> <hotel> <hotelid>1826</hotelid> <hotelname>Antiguo Mesón de Aspeytia</hotelname> <cityid>QRO</cityid> <cityname>Querétaro - Ciudad</cityname> <roomtype>SGL1QN</roomtype> <roomtypename>Sencilla 1 cama Queen</roomtypename> <mealplan>EP,EP,EP</mealplan> <mealplanname>Sólo Habitación</mealplanname> <codigo_aeropuerto>QRO</codigo_aeropuerto> <roomtypedetails> <maxadults>2</maxadults> <maxkids>0</maxkids> <maxextras>0</maxextras> <maxpersons>2</maxpersons> <kidsagefrom>0</kidsagefrom> <kidsageto>0</kidsageto> <juniorsagefrom>0</juniorsagefrom> <juniorsageto>0</juniorsageto> <roomview>Vista a la calle</roomview> <bedding>1 cama Queen size</bedding> </roomtypedetails> <rooms> <Roomrates> <roomtype>SGL1QN</roomtype> <roomtypename>Sencilla 1 cama Queen</roomtypename> <rate>4066.74439872</rate> <rate_public>4733.9230590831</rate_public> <Promosaving>0</Promosaving> <isPromo>N</isPromo> <mealplan>EP</mealplan> <mealplanname>Sólo Habitación</mealplanname> <room_num>1</room_num> <State>Z</State> </Roomrates> <Roomrates> <roomtype>SGL1QN</roomtype> <roomtypename>Sencilla 1 cama Queen</roomtypename> <rate>4066.74439872</rate> <rate_public>4733.9230590831</rate_public> <Promosaving>0</Promosaving> <isPromo>N</isPromo> <mealplan>EP</mealplan> <mealplanname>Sólo Habitación</mealplanname> <room_num>2</room_num> <State>Z</State> </Roomrates> <Roomrates> <roomtype>SGL1QN</roomtype> <roomtypename>Sencilla 1 cama Queen</roomtypename> <rate>4066.74439872</rate> <rate_public>4733.9230590831</rate_public> <Promosaving>0</Promosaving> <isPromo>N</isPromo> <mealplan>EP</mealplan> <mealplanname>Sólo Habitación</mealplanname> <room_num>3</room_num> <State>Z</State> </Roomrates> </rooms> <categoryid>S35</categoryid> <ubicationid>Ciudad</ubicationid> <destinationid>Querétaro</destinationid> <rate>12200.23319616</rate> <rate_public>14201.7691772493</rate_public> <isrequote>N</isrequote> <haspackage>Y</haspackage> <state>Z</state> <ispromo>N</ispromo> <promo /> <promosaving>0</promosaving> <terms /> <error /> </hotel> </hotels> </QuoteHotels>
llego a esta estructura mediante file_get_contents, el codigo es el siguiente:
Código PHP:
Ver original
<?php $llamada_ws=file_get_contents("http://xml.travel.com/enginexml.asmx/getQuoteHotels?r1k2a=-1&r1k3a=-1&r2a=11&r4k2a=-1&r4k3a=-1&des=40&l=ESP&co=MX"); $xml=new SimpleXMLElement($llamada_ws); foreach ($xml->xpath('//Roomrates') as $itemroom) { echo $itemroom->roomtype,'<br />'; } ?>
Desde ya gracias por su atención y ayuda.