Tema: xml y php
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/09/2011, 19:08
Avatar de andresdzphp
andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 7 meses
Puntos: 793
Información Respuesta: xml y php

Bueno teniendo en cuenta que ya llevas varios días con este tema y te sigue dando duro, me puse en la tarea de hacerte un par de ejemplos.

A que me refiero con namespace?

<direccion:Cliente
<direccion:DomicilioFiscal
</direccion:Cliente>

ahí estás usando namescape (en negrita) y lo tienes que definir en tu XML (desconozco completamente si lo hiciste o no).

XML a modo de ejemplo, sólo con el fin de hacer estos ejercicios:

Código PHP:
Ver original
  1. <?php
  2. $xml = <<<XML
  3. <?xml version="1.0" encoding="UTF-8"?>
  4. <direccion:Cliente nombre="PRUEBA PRUEBA PRUEBA" rfc="AAAA610917AAA" xmlns:direccion="http://www.w3.org/2001/XMLSchema">
  5. <direccion:DomicilioFiscal codigoPostal="12300" localidad="CIUDAD DE MEXICO" noExterior="54" estado="DISTRITO FEDERAL" pais="MEXICO" municipio="MILPA ALTA" colonia="SAN SALVADOR CUAUHTENCO" calle="CEDROS"/>
  6. </direccion:Cliente>
  7. XML;

Si te das cuenta agregué la siguiente línea a tu XML, para que lo tome como definición de los namescape y las clases no me den error (SÓLO CON EL FIN DE HACER ESTOS EJEMPLOS) no quiere decir que esa sea la forma correcta de definirlo.

--> xmlns:direccion="http://www.w3.org/2001/XMLSchema"

Ejemplo con la clase SimpleXMLElement

Código PHP:
Ver original
  1. <?php
  2. $sp = new SimpleXMLElement($xml); //$xml = el XML a modo de ejemplo
  3. $ns = $sp->getNamespaces(true);
  4. $sp->registerXPathNamespace('d', $ns['direccion']);
  5. $cliente = $sp->xpath('//d:Cliente');
  6. $domicilio = $sp->xpath('//d:DomicilioFiscal');
  7.  
  8. echo '<h3>Datos del cliente</h3>';
  9. foreach ($cliente[0]->attributes() as $c => $atributo) {
  10.     echo "$c $atributo" . '<br />';
  11. }
  12. echo '<h3>Datos del domicilio</h3>';
  13. foreach ($domicilio[0]->attributes() as $c => $atributo) {
  14.     echo "$c $atributo" . '<br />';
  15. }

Ejemplo con la clase DOMDocument

Código PHP:
Ver original
  1. <?php
  2. $doc = new DOMDocument();
  3. $doc->loadXML($xml);  //$xml = el XML a modo de ejemplo
  4. $cliente = $doc->getElementsByTagNameNS($doc->lookupNamespaceUri('direccion'), 'Cliente');
  5. $domicilio = $doc->getElementsByTagNameNS($doc->lookupNamespaceUri('direccion'), 'DomicilioFiscal');
  6.  
  7. echo '<h3>Datos del cliente</h3>';
  8. foreach ($cliente->item(0)->attributes as $atributo) {
  9.     echo $atributo->name . ' ' . $atributo->nodeValue . '<br />';
  10. }
  11. echo '<h3>Datos del domicilio</h3>';
  12. foreach ($domicilio->item(0)->attributes as $atributo) {
  13.     echo $atributo->name . ' ' . $atributo->nodeValue . '<br />';
  14. }

El resultado de ambos ejemplos es:

Cita:
Datos del cliente

nombre PRUEBA PRUEBA PRUEBA
rfc AAAA610917AAA
Datos del domicilio

codigoPostal 12300
localidad CIUDAD DE MEXICO
noExterior 54
estado DISTRITO FEDERAL
pais MEXICO
municipio MILPA ALTA
colonia SAN SALVADOR CUAUHTENCO
calle CEDROS
Espero que le sea útil a las personas que trabajan con XML.

Nota: Pueden haber mejores formas de hacerlo y simplicarlo.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP