![Pensando](http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif)
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<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<direccion:Cliente nombre="PRUEBA PRUEBA PRUEBA" rfc="AAAA610917AAA" xmlns:direccion="http://www.w3.org/2001/XMLSchema">
<direccion:DomicilioFiscal codigoPostal="12300" localidad="CIUDAD DE MEXICO" noExterior="54" estado="DISTRITO FEDERAL" pais="MEXICO" municipio="MILPA ALTA" colonia="SAN SALVADOR CUAUHTENCO" calle="CEDROS"/>
</direccion:Cliente>
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<?php
$sp = new SimpleXMLElement($xml); //$xml = el XML a modo de ejemplo
$ns = $sp->getNamespaces(true);
$sp->registerXPathNamespace('d', $ns['direccion']);
$cliente = $sp->xpath('//d:Cliente');
$domicilio = $sp->xpath('//d:DomicilioFiscal');
echo '<h3>Datos del cliente</h3>';
foreach ($cliente[0]->attributes() as $c => $atributo) {
echo "$c $atributo" . '<br />';
}
echo '<h3>Datos del domicilio</h3>';
foreach ($domicilio[0]->attributes() as $c => $atributo) {
echo "$c $atributo" . '<br />';
}
Ejemplo con la clase DOMDocument
Código PHP:
Ver original<?php
$doc = new DOMDocument();
$doc->loadXML($xml); //$xml = el XML a modo de ejemplo
$cliente = $doc->getElementsByTagNameNS($doc->lookupNamespaceUri('direccion'), 'Cliente');
$domicilio = $doc->getElementsByTagNameNS($doc->lookupNamespaceUri('direccion'), 'DomicilioFiscal');
echo '<h3>Datos del cliente</h3>';
foreach ($cliente->item(0)->attributes as $atributo) {
echo $atributo->name . ' ' . $atributo->nodeValue . '<br />';
}
echo '<h3>Datos del domicilio</h3>';
foreach ($domicilio->item(0)->attributes as $atributo) {
echo $atributo->name . ' ' . $atributo->nodeValue . '<br />';
}
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.