2011-06-18 9 views
6

Realmente no entiendo cómo usar SimpleXML en PHP.Obtiene atributos y valores usando SimpleXML

Aquí es un exemple de mi archivo XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<eventlog version="1.1"> 

<event source="Firewall" timeStamp="1308433939" type="0" deleted="0" bodyLength="218"> 
<subject>Network access detected</subject> 
<action>Allowed</action> 
<message>The program c:\xampp\apache\bin\httpd.exe attempted to connect to the Internet. The program used the protocol TCP on port 80.</message> 
</event> 

</eventlog> 

que necesito para recuperar esta: Fuente, fecha y hora, tema, acción, Mensaje

Es sólo que no entiendo. ¿Puede alguien ayudarme con esto?

+0

pregunta es pregunta y la respuesta es la respuesta. Trasladé tu edición a una respuesta a continuación: http://stackoverflow.com/a/14194288/367456 - Puedes hacer lo mismo (al visitar el historial de tu pregunta) si quieres, luego eliminaré mi copia. – hakre

Respuesta

16

Este código debería funcionar:

$xml = new SimpleXMLElement($xmlString); 
$source = $xml->event->attributes()->source; 
$timestamp = $xml->event->attributes()->timestamp; 
$subject = $xml->event->subject; 
$action = $xml->event->action; 
$message = $xml->event->message; 

... donde $ xmlString es la cadena del archivo XML.

Lea acerca de cómo usar simpleXML here.

Espero que esto ayude y buena suerte!

+0

Woah! ¡No pensé en eso! ¡Gracias! Pero tengo una etiqueta múltiple de 'evento': S, ¿así que lo puse entre el ciclo foreach? –

+1

Si desea obtener todo el asunto, la acción y los mensajes debajo de todas las etiquetas de evento, entonces sí, simplemente use un bucle foreach. Si solo desea obtener uno específico de los eventos, use el evento [0], el evento [1], etc. ¡Me alegro de haber ayudado! –

1

En interés de que le enseña a pescar, le animo a que consulte PHP Docs on SimpleXML.

Sin embargo, para ayudarlo a comenzar.

  1. Uso simplexml_load_file()simplexml_load_string() o para analizar el código XML
  2. Esto devolverá un objeto - utilizar var_dump()print_r() o para ver cómo se ve.
  3. Recorre este objeto para obtener los atributos que deseas.
+0

Sí, gracias, ya leí estos documentos ... Pero intentaré usar var_dump y con múltiples intentos debería poder obtener lo que quiero. Gracias :) –

1

intente lo siguiente:

function time2DatetimeUS($timestamp) 
{ 
    $datetime = date('Y-m-d H:i:s', $timestamp); 
    return $datetime; 
} 

$db = new SQLiteDatabase("AutoAnalysis.sqlite", 0666, $err); 

$xml = new SimpleXMLElement($logs_antivirus_local, NULL, TRUE); 
foreach ($xml->event as $a) { 
    $source = $a->attributes()->source; 
    $timestamp = $a->attributes()->timeStamp; 
    $datetime = time2DatetimeUS("$timestamp"); 
    $subject = $a->subject; 
    $action = $a->action; 
    $message = $a->message; 
} 

$query = "INSERT INTO BitDefender(id, datetime, module, sujet, action, message) 
       VALUES ('', '$datetime', '$source', '$subject', '$action', '$message')"; 
$results = $db->queryexec($query); 
echo "  $datetime  $source $subject"; 
Cuestiones relacionadas