Получение атрибутов и значений с помощью SimpleXML


Я действительно не понимаю, как использовать SimpleXML в PHP.

Вот пример моего 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>

Мне нужно получить это: Источник, Метка времени, Тема, Действие, Сообщение

Я просто не понимаю. Может кто-нибудь, пожалуйста, помочь мне с этим?

Author: hakre, 2011-06-19

3 answers

Этот код должен работать:

$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;

... где $XMLSTRING - это строка xml-файла.

Прочитайте о том, как использовать SimpleXML здесь.

Надеюсь, это помогло и удачи!

 16
Author: Jeff Gortmaker, 2011-06-18 23:28:40

В интересах научить вас ловить рыбу, я бы посоветовал вам ознакомиться с Документами PHP на SimpleXML.

Чтобы помочь вам начать работу.

  1. Используйте simplexml_load_file() или simplexml_load_string() для анализа вашего XML
  2. Это вернет объект - используйте var_dump() или print_r(), чтобы посмотреть, как он выглядит.
  3. Пройдите по этому объекту, чтобы получить нужные атрибуты.
 1
Author: Jason McCreary, 2011-06-18 23:25:13

Попробуйте выполнить следующее:

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";
 1
Author: hakre, 2014-03-06 13:56:36