Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2010, 16:18
Serenity
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 1 mes
Puntos: 1
xpath no me funciona

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
  1. <?php
  2. $xmlstr = <<<XML
  3. <?xml version='1.0' standalone='yes'?>
  4. <movies>
  5. <movie>
  6.   <id>1</id>
  7.   <title>PHP: Behind the Parser</title>
  8.   <characters>
  9.    <character>
  10.     <name>Ms. Coder</name>
  11.     <actor>Onlivia Actora</actor>
  12.    </character>
  13.    <character>
  14.     <name>Mr. Coder</name>
  15.     <actor>El ActÓr</actor>
  16.    </character>
  17.   </characters>
  18.   <plot>
  19.    So, this language. It's like, a programming language. Or is it a
  20.    scripting language? All is revealed in this thrilling horror spoof
  21.    of a documentary.
  22.   </plot>
  23.   <rating type="thumbs">7</rating>
  24.   <rating type="stars">5</rating>
  25. </movie>
  26. <movie>
  27.   <id>2</id>
  28.   <title>PHP: Behind the Parser</title>
  29.   <characters>
  30.    <character>
  31.     <name>Ms. Coder</name>
  32.     <actor>Onlivia Actora</actor>
  33.    </character>
  34.    <character>
  35.     <name>Mr. Coder</name>
  36.     <actor>El ActÓr</actor>
  37.    </character>
  38.   </characters>
  39.   <plot>
  40.    So, this language. It's like, a programming language. Or is it a
  41.    scripting language? All is revealed in this thrilling horror spoof
  42.    of a documentary.
  43.   </plot>
  44.   <rating type="thumbs">7</rating>
  45.   <rating type="stars">5</rating>
  46. </movie>
  47. </movies>
  48. XML;
  49. ?>

Este es el código donde se aplica la instrucción Xpath:

Código PHP:
Ver original
  1. <?php
  2. include 'ejemplo.php';
  3. $xml = simplexml_load_string($xmlstr);
  4.  
  5. foreach ($xml->xpath('//character') as $itemcharacter) {
  6.     echo $itemcharacter->name, 'played by ', $itemcharacter->actor, '<br />';
  7. }
  8. ?>

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
  1. <?xml version="1.0" encoding="utf-8" ?>
  2.  <QuoteHotels xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.  
  4. xmlns="http://tempuri.org/xml/enginexml_agencies">
  5.  <hotels>
  6.  <hotel>
  7.   <hotelid>1826</hotelid>
  8.   <hotelname>Antiguo Mesón de Aspeytia</hotelname>
  9.   <cityid>QRO</cityid>
  10.   <cityname>Querétaro - Ciudad</cityname>
  11.   <roomtype>SGL1QN</roomtype>
  12.   <roomtypename>Sencilla 1 cama Queen</roomtypename>
  13.   <mealplan>EP,EP,EP</mealplan>
  14.   <mealplanname>Sólo Habitación</mealplanname>
  15.   <codigo_aeropuerto>QRO</codigo_aeropuerto>
  16.  <roomtypedetails>
  17.   <maxadults>2</maxadults>
  18.   <maxkids>0</maxkids>
  19.   <maxextras>0</maxextras>
  20.   <maxpersons>2</maxpersons>
  21.   <kidsagefrom>0</kidsagefrom>
  22.   <kidsageto>0</kidsageto>
  23.   <juniorsagefrom>0</juniorsagefrom>
  24.   <juniorsageto>0</juniorsageto>
  25.   <roomview>Vista a la calle</roomview>
  26.   <bedding>1 cama Queen size</bedding>
  27.   </roomtypedetails>
  28.  <rooms>
  29.  <Roomrates>
  30.   <roomtype>SGL1QN</roomtype>
  31.   <roomtypename>Sencilla 1 cama Queen</roomtypename>
  32.   <rate>4066.74439872</rate>
  33.   <rate_public>4733.9230590831</rate_public>
  34.   <Promosaving>0</Promosaving>
  35.   <isPromo>N</isPromo>
  36.   <mealplan>EP</mealplan>
  37.   <mealplanname>Sólo Habitación</mealplanname>
  38.   <room_num>1</room_num>
  39.   <State>Z</State>
  40.   </Roomrates>
  41.  <Roomrates>
  42.   <roomtype>SGL1QN</roomtype>
  43.   <roomtypename>Sencilla 1 cama Queen</roomtypename>
  44.   <rate>4066.74439872</rate>
  45.   <rate_public>4733.9230590831</rate_public>
  46.   <Promosaving>0</Promosaving>
  47.   <isPromo>N</isPromo>
  48.   <mealplan>EP</mealplan>
  49.   <mealplanname>Sólo Habitación</mealplanname>
  50.   <room_num>2</room_num>
  51.   <State>Z</State>
  52.   </Roomrates>
  53.  <Roomrates>
  54.   <roomtype>SGL1QN</roomtype>
  55.   <roomtypename>Sencilla 1 cama Queen</roomtypename>
  56.   <rate>4066.74439872</rate>
  57.   <rate_public>4733.9230590831</rate_public>
  58.   <Promosaving>0</Promosaving>
  59.   <isPromo>N</isPromo>
  60.   <mealplan>EP</mealplan>
  61.   <mealplanname>Sólo Habitación</mealplanname>
  62.   <room_num>3</room_num>
  63.   <State>Z</State>
  64.   </Roomrates>
  65.   </rooms>
  66.   <categoryid>S35</categoryid>
  67.   <ubicationid>Ciudad</ubicationid>
  68.   <destinationid>Querétaro</destinationid>
  69.   <rate>12200.23319616</rate>
  70.   <rate_public>14201.7691772493</rate_public>
  71.   <isrequote>N</isrequote>
  72.   <haspackage>Y</haspackage>
  73.   <state>Z</state>
  74.   <ispromo>N</ispromo>
  75.   <promo />
  76.   <promosaving>0</promosaving>
  77.   <terms />
  78.   <error />
  79.   </hotel>
  80.   </hotels>  
  81.   </QuoteHotels>

llego a esta estructura mediante file_get_contents, el codigo es el siguiente:

Código PHP:
Ver original
  1. <?php
  2. $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");
  3.  
  4. $xml=new SimpleXMLElement($llamada_ws);
  5. foreach ($xml->xpath('//Roomrates') as $itemroom) {
  6.     echo $itemroom->roomtype,'<br />';
  7. }
  8. ?>

Desde ya gracias por su atención y ayuda.