2011-06-18 18 views
6

PHPでSimpleXMLを使用する方法がわかりません。SimpleXMLを使用して属性と値を取得

<?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> 

私はこれを取得する必要があります: ソース、タイムスタンプ、件名、アクション、メッセージ

私はちょうどそれを得ることはありません。ここ

は私のXMLファイルのexempleです。誰かがこれで私を助けてくれますか?

+0

質問は、質問と答えの答えです。私はあなたの編集を以下の答えに移しました:http://stackoverflow.com/a/14194288/367456 - あなたが好きなら同じことをすることができます。私は私のコピーを削除します。 – hakre

答えて

16

このコードは動作するはずです:$ xmlStringはxmlファイルの文字列である

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

を...。

simplexML hereの使い方を読んでください。

これは役に立って幸運を願っています!

+0

うわー!私はそれについて考えなかった!ありがとう!しかし、私は複数の 'イベント'タグを持っています:S私はちょうどforeachループの間に置く? –

+1

すべてのイベントタグの下で件名、アクション、およびメッセージを取得したい場合は、ちょうどforeachループを使用してください。特定のイベントだけを取得したい場合は、イベント[0]、イベント[1]などを使用してください。喜んで助けました! –

1

に興味があり、を魚に教えることを願って、PHP Docs on SimpleXMLをチェックアウトすることをおすすめします。

あなたのスタートを手伝ってください。

  1. これは、オブジェクトを返しますあなたのXML
  2. の解析に使用simplexml_load_file()simplexml_load_string() - それはどのように見えるかを確認するために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"; 
関連する問題