2011-06-18 123 views
6

我真的不明白如何在PHP中使用SimpleXML。使用SimpleXML獲取屬性和值

這裏是我的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> 

我需要檢索此: 來源,時間戳,主題,行動,信息

我只是不明白這一點。有人可以幫助我嗎?

+0

問題是問題,答案是答案。我將你的編輯移動到下面的答案:http://stackoverflow.com/a/14194288/367456 - 如果你喜歡,你可以做同樣的事情(從訪問你的問題的歷史),我會刪除我的副本。 – hakre

回答

16

此代碼應工作:

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

希望這會有所幫助,祝你好運!

+0

哇!我沒有想到這個!謝謝!但我有多個'事件'標籤,:S,所以我只是把它放在foreach循環之間? –

+1

如果您想要獲得所有事件標籤下的所有主題,操作和消息,那麼只需使用foreach循環即可。如果你只是想獲得一個特定的事件,使用事件[0],事件[1]等。很高興我幫助! –

1

爲了教育你,我建議你看看PHP Docs on SimpleXML

雖然幫助你開始。

  1. 使用simplexml_load_file()simplexml_load_string()解析你的XML
  2. 這將返回一個對象 - 使用var_dump()print_r(),看看是什麼樣子。
  3. 遍歷此對象以獲取所需的屬性。
+0

是的謝謝,我已經閱讀了這個文檔...但我會嘗試使用var_dump和多個嘗試我應該能夠得到我想要的。謝謝:) –

1

嘗試以下操作:

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