Foros del Web » Programando para Internet » PHP »

xml array node

Estas en el tema de xml array node en el foro de PHP en Foros del Web. tengo este xml response Código PHP: < HotelValuedAvailRS xmlns = "http://www.hotelbeds.com/schemas/2005/06/messages"  xmlns : xsi = "http://www.w3.org/2001/XMLSchemainstance"  xsi : schemaLocation = "http://www.MIWEB.com/schemas/2005/06/messages HotelValuedAvailRS.xsd"  timeToExpiration = "1799559"  totalItems = ...
  #1 (permalink)  
Antiguo 27/11/2010, 08:34
Avatar de milerweb  
Fecha de Ingreso: enero-2008
Ubicación: Lima peru
Mensajes: 81
Antigüedad: 16 años, 10 meses
Puntos: 1
Pregunta xml array node

tengo este xml response

Código PHP:
<HotelValuedAvailRS xmlns="http://www.hotelbeds.com/schemas/2005/06/messages" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://www.MIWEB.com/schemas/2005/06/messages HotelValuedAvailRS.xsd" timeToExpiration="1799559" totalItems="326" echoToken="DummyEchoToken">
- <
AuditData>
  <
ProcessTime>1016</ProcessTime
  <
Timestamp>2007-01-09 16:08:56.263</Timestamp
  <
RequestHost>10.0.0.182</RequestHost
  <
ServerName>ITINTERNET08</ServerName
  <
ServerId>LO</ServerId
  <
SchemaRelease>2005/06</SchemaRelease
  <
HydraCoreRelease>2.0.200701021600</HydraCoreRelease
  <
HydraEnumerationsRelease>1.0.200701021600</HydraEnumerationsRelease
  <
MerlinRelease>N/A</MerlinRelease
  </
AuditData>
  <
PaginationData currentPage="1" totalPages="17" /> 
- <
ServiceHotel xsi:type="ServiceHotel" availToken="gSPgFZmXOz/wKAXjNFfUdQ==">
- <
ContractList>
- <
Contract>
  <
Name>CGMVARIOS</Name
  <
IncomingOffice code="1" /> 
  <
Classification code="NOR">STANDARD PRICING</Classification
  </
Contract>
  </
ContractList>
  <
DateFrom date="20071022" /> 
  <
DateTo date="20071024" /> 
  <
Currency code="EUR">Euro</Currency
- <
HotelInfo xsi:type="ProductHotel">
  <
Code>76</Code
  <
Name>Bendinat</Name
- <
ImageList>
- <
Image>
  <
Type>JPG</Type
  <
Order>1</Order
  <
VisualizationOrder>1</VisualizationOrder
  <
Url>http://www.MIWEB.com/giata/small/old/MALLORCA/BENDINAT/BENDINATHOT.JPG</Url> 
  
</Image>
- <
Image>
  <
Type>jpg</Type
  <
Order>2</Order
  <
VisualizationOrder>2</VisualizationOrder
  <
Url>http://www.MIWEB.com/giata/small/036157/036157_hb_r_002.jpg</Url> 
  
</Image>
  </
ImageList>
  <
Category type="SIMPLE" code="4EST" shortname="4*">4 STARS</Category
- <
Destination type="SIMPLE" code="PMI">
  <
Name>Majorca</Name
- <
ZoneList>
  <
Zone type="SIMPLE" code="25">Bendinat</Zone
  </
ZoneList>
  </
Destination>
  <
Position latitude="39.53240000000000264890" longitude="2.58029999999999981597" /> 
  </
HotelInfo>
- <
AvailableRoom>
- <
HotelOccupancy>
  <
RoomCount>1</RoomCount
- <
Occupancy>
  <
AdultCount>2</AdultCount
  <
ChildCount>0</ChildCount
  </
Occupancy>
  </
HotelOccupancy>
- <
HotelRoom SHRUI="x/Sef0dn9jkzCPIf9cUSFg==" onRequest="N">
  <
Board type="SIMPLE" code="HDE10" shortname="BB">BED AND BREAKFAST</Board
  <
RoomType type="SIMPLE" code="DBLE10" characteristic="ST">DOUBLETWIN STANDARD</RoomType
- <
Price>
  <
Amount>324.420</Amount
  </
Price>
  </
HotelRoom>
  </
AvailableRoom>
<+/
HotelValuedAvailRS 
lo que quiero es jalar el contenido de este node - <ServiceHotel xsi:type="ServiceHotel" availToken="gSPgFZmXOz/wKAXjNFfUdQ==">

en otras palabras quiero sacar el valor de availToken="gSPgFZmXOz/wKAXjNFfUdQ=="

genero los arrays con este codigo pero no me funciona jala los nodes pero no los conetnidos de los nodes
este el code aver si alguien me echa una mano.

Código PHP:
$_token = array();

        
$request_xml 'mixmlrequest';
        
$token_xml getXMLResponse(XML_POST_URL_MIWEB,$request_xml);
        
/*if(strpos('xml',$paises_xml)===true)
        {*/

            
$_token $this->parseXmlToArray($token_xml);
            
$_token $_token['HotelValuedAvailRS'];
            
    if(
count($_token)>0)
                {
                    foreach(
$_token as $_tok)
                    {
                    
$temp['HotelValuedAvailRS']=$_tok['HotelValuedAvailRS'];
                    
            
                    
                                
                 
$_token[]=$temp;
                    }    
                   
                }
        
            
        
/*}*/
        
return $_token
  #2 (permalink)  
Antiguo 27/11/2010, 08:59
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: xml array node

Si lo único que necesitas es el valor de un atributo podrias utilizar DOMXpath en vez de parsear todo el xml.
En caso de que sea necesario parsear el xml tendrias que mostrar el metodo parseXmlToArray para ver porque no te devuelve los atributos de los nodos.

Salu2.
  #3 (permalink)  
Antiguo 27/11/2010, 09:12
Avatar de milerweb  
Fecha de Ingreso: enero-2008
Ubicación: Lima peru
Mensajes: 81
Antigüedad: 16 años, 10 meses
Puntos: 1
Exclamación Respuesta: xml array node

Cita:
Iniciado por masterpuppet Ver Mensaje
Si lo único que necesitas es el valor de un atributo podrias utilizar [URL="http://www.php.net/manual/en/class.domxpath.php"]DOMXpath[/URL] en vez de parsear todo el xml.
En caso de que sea necesario parsear el xml tendrias que mostrar el metodo parseXmlToArray para ver porque no te devuelve los atributos de los nodos.

Salu2.
bueno si pero me gustaria saber un ejemplo de codigo para ver como funka
  #4 (permalink)  
Antiguo 27/11/2010, 09:47
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: xml array node

Seria algo asi:

Sin Xpath:

Código PHP:
Ver original
  1. $doc = new DOMDocument();
  2. $doc->loadXML($xml);
  3.  
  4. $nodeList = $dom->getElementsByTagName('ServiceHotel');      
  5.  
  6. foreach($nodeList as $node){
  7.      echo 'TOKEN :: ' . $node->getAttribute('availToken');
  8. }

Con Xpath:

Código PHP:
Ver original
  1. $doc = new DOMDocument();
  2. $doc->loadXML($xml);  
  3.  
  4. $xpath    = new DOMXPath($doc);
  5. $nodeList = $xpath->query('//*[@availToken]');
  6.                
  7. foreach($nodeList as $node){
  8.      echo 'TOKEN :: ' . $node->getAttribute('availToken');
  9. }

Nota: loadXML carga desde un string, si queres cargar desde un fichero cambialo por load

Salu2.
  #5 (permalink)  
Antiguo 27/11/2010, 10:12
Avatar de milerweb  
Fecha de Ingreso: enero-2008
Ubicación: Lima peru
Mensajes: 81
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: xml array node

Cita:
Iniciado por masterpuppet Ver Mensaje
Seria algo asi:

Sin Xpath:

Código PHP:
Ver original
  1. $doc = new DOMDocument();
  2. $doc->loadXML($xml);
  3.  
  4. $nodeList = $dom->getElementsByTagName('ServiceHotel');      
  5.  
  6. foreach($nodeList as $node){
  7.      echo 'TOKEN :: ' . $node->getAttribute('availToken');
  8. }

Con Xpath:

Código PHP:
Ver original
  1. $doc = new DOMDocument();
  2. $doc->loadXML($xml);  
  3.  
  4. $xpath    = new DOMXPath($doc);
  5. $nodeList = $xpath->query('//*[@availToken]');
  6.                
  7. foreach($nodeList as $node){
  8.      echo 'TOKEN :: ' . $node->getAttribute('availToken');
  9. }

Nota: loadXML carga desde un string, si queres cargar desde un fichero cambialo por load

Salu2.
buena broder funka la segunda pero la primera no de todas formas gracias ya me diste la idea mas carma para voz

Etiquetas: xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:08.