Hola!!,
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.