PHP - Problemas al extraer informacion de un archivo XML

   
Vista:

Problemas al extraer informacion de un archivo XML

Publicado por parragadiego (1 intervención) el 13/03/2008 21:35:08
Hola amigos:

Aqui con un problema al poder extraer informacion de un archivo XML...

Lo explico mejor tengo un archivo XML donde almacena informacion de usuarios de Jabberd 1.4.3

Ejemplo este es dparraga.xml donde almacena infomacion de un usuario..

[COLOR="SeaGreen"][SIZE="1"]- <xdb>
<password xmlns="jabber:iq:auth" xdbns="jabber:iq:auth">diego1146</password>
- <query xmlns="jabber:iq:register" xdbns="jabber:iq:register">
<username>dparraga</username>
<password xmlns="jabber:iq:auth">diego1146</password>
<x xmlns="jabber:x:delay" stamp="20080123T15:39:47">registered</x>
</query>
- <vCard prodid="-//HandGen//NONSGML vGen v1.0//EN" version="2.0" xmlns="vcard-temp" xdbns="vcard-temp">
<FN>Diego Parraga Menchaca</FN>
<NICKNAME>Diego</NICKNAME>
<BDAY>14 de Febrero</BDAY>
<URL />
- <EMAIL>
<USERID>dparraga@mail.rua.net</USERID>
</EMAIL>
- <TEL>
<NUMBER>2412384-77765820-76241811-70553561</NUMBER>
</TEL>
- <ADR>
<STREET>Calle 9 #1049, Zona La Lomaz, Av. Final Buenos Aires</STREET>
<EXTADD />
<LOCALITY>La Paz</LOCALITY>
<REGION>Casado</REGION>
<PCODE />
<CTRY>Bolivia</CTRY>
</ADR>
- <ORG>
<ORGNAME>Ruat</ORGNAME>
<ORGUNIT>Sistemas y Comunicaciones</ORGUNIT>
</ORG>
<TITLE>Tecnico II-Operador de Soporte Interno y Servidores</TITLE>
<ROLE>Soporte Interno y Servidores</ROLE>
<DESC />
</vCard>
- <query xmlns="jabber:iq:roster" xdbns="jabber:iq:roster">
- <item jid="fmartinez@mail.rua.net" name="fmartinez@mail.rua.net" subscription="from" ask="subscribe">
<group>RRRHH</group>
</item>
- <item jid="ccussi@mail.rua.net" name="ccussi" subscription="both">
<group>OPERACIONES</group>
</item>
- <item name="Nestor" jid="nespejo@mail.rua.net" subscription="both">
<group>OPERACIONES</group>
</item>
- <item jid="valiaga@mail.rua.net" subscription="to">
<group>OPERACIONES</group>
</item>
</query>
<query xmlns="jabber:iq:last" last="1205249833" xdbns="jabber:iq:last">Disconnected</query>
</xdb>[/SIZE][/COLOR]

dicha informacion debe ser importada a la base de datos MySql, para lo cual estoy desarrollando un pequeño porgrama en PHP, logre leer los datos mas comunes del XML.

El codigo es
[SIZE="1"][COLOR="DarkRed"]<?php
$doc = new DOMDocument();
$doc->load( 'xml/dparraga.xml' );
$mails = $doc->getElementsByTagName( "xdb" );
foreach( $mails as $mail )
{
$usuarios = $mail->getElementsByTagName( "username" );
$usuario = $usuarios->item(0)->nodeValue;
echo "Nombre del Usuario: ", $usuario;
echo"<br>";

$claves = $mail->getElementsByTagName( "password" );
$clave = $claves->item(0)->nodeValue;
echo "Clave: ", $clave;
echo"<br>";

$nomcomples = $mail->getElementsByTagName( "FN" );
$nomcomple = $nomcomples->item(0)->nodeValue;
echo "Nombre Completo: ", $nomcomple;
echo"<br>";

$nicks = $mail->getElementsByTagName( "NICKNAME" );
$nick = $nicks->item(0)->nodeValue;
echo "Nick Name: ", $nick;
echo"<br>";

$fechnas = $mail->getElementsByTagName( "BDAY" );
$fechna = $fechnas->item(0)->nodeValue;
echo "Fecha de Nacimiento: ", $fechna;
echo"<br>";

$usuids = $mail->getElementsByTagName( "USERID" );
$usuid = $usuids->item(0)->nodeValue;
echo "Usuario Jabberd: ", $usuid;
echo"<br>";

$telefs = $mail->getElementsByTagName( "NUMBER" );
$telef = $telefs->item(0)->nodeValue;
echo "Telefonos: ", $telef;
echo"<br>";

$direccs = $mail->getElementsByTagName( "STREET" );
$direcc = $direccs->item(0)->nodeValue;
echo "Direccion: ", $direcc;
echo"<br>";

$localidads = $mail->getElementsByTagName( "LOCALITY" );
$localidad = $localidads->item(0)->nodeValue;
echo "Localidad: ", $localidad;
echo"<br>";

$estcivs = $mail->getElementsByTagName( "REGION" );
$estciv = $estcivs->item(0)->nodeValue;
echo "Estado Civil: ", $estciv;
echo"<br>";

$paiss = $mail->getElementsByTagName( "CTRY" );
$pais = $paiss->item(0)->nodeValue;
echo "Pais: ", $pais;
echo"<br>";

$empresas = $mail->getElementsByTagName( "ORGNAME" );
$empresa = $empresas->item(0)->nodeValue;
echo "Empresa: ", $empresa;
echo"<br>";

$unidads = $mail->getElementsByTagName( "ORGUNIT" );
$unidad = $unidads->item(0)->nodeValue;
echo "Unidad: ", $unidad;
echo"<br>";

$cargos = $mail->getElementsByTagName( "TITLE" );
$cargo = $cargos->item(0)->nodeValue;
echo "Cargo: ", $cargo;
echo"<br>";

$rols = $mail->getElementsByTagName( "ROLE" );
$rol = $rols->item(0)->nodeValue;
echo "Rol: ", $rol;
echo"<br>";

$contactos = $mail->getElementsByTagName( "item" );
$i=1;
foreach( $contactos as $contacto )
{

$contacs = $contacto->getElementsByTagName( "group" );
$contac = $contacs->item(0)->nodeValue;
echo $i;
echo "Contacto: ", $contac;
echo"<br>";
$i=$i+1;
}

}
?>[/COLOR][/SIZE]

Esta funcionando a la perfeccion sacando el nombre del usuario su clave... pero an al aprte de sacar los contactos del ususario es mi problema debido a que esta dentro de una etiquete item como pueden ver..
[SIZE="1"][COLOR="SeaGreen"]- <item jid="fmartinez@mail.rua.net" name="fmartinez@mail.rua.net" subscription="from" ask="subscribe">
<group>RRRHH</group>
</item>
- <item jid="ccussi@mail.rua.net" name="ccussi" subscription="both">
<group>OPERACIONES</group>
</item>
- <item name="Nestor" jid="nespejo@mail.rua.net" subscription="both">
<group>OPERACIONES</group>
</item>
- <item jid="valiaga@mail.rua.net" subscription="to">
<group>OPERACIONES</group>
</item>[/COLOR][/SIZE]

Y como ven tengo que sacar:
1. El contacto ccussi@mail.rua.net y su nombre ccussi
2. Como ven hay varios item en el caso hay cuatro, entonces para los cuatro tengo que sacar su contacto y nombre que esta dentro de la etiquete <item ....>

Com pueden ver mi codigo solo casa al grupo a quien pertenece el contacto, pero no el contacto, ni el nombre...

Por eso recurro a la comunidad para que me pueden guiar o darme un ejemplo o que funcion puedo utilizar para poder sacar el contacto y nombre...

Les agradezco el tiempo que se toman para leer el mail.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder