私は数年間プログラミングをしていますが、phpはかなり新しいです。
私はプロジェクトに取り組んでおり、最終的な目標は、xmlファイルの特定の要素を毎晩oracleテーブルにロードすることです。毎晩実行され、ローカルマシンにファイルを保存するスクリプトがあります。私は延々と答えを探してきましたが、失敗しました。
これは、xmlファイルの集約された例です。
<?xml version="1.0" encoding="UTF-8" ?>
<Report account="7869" start_time="2012-02-23T00:00:00+00:00" end_time="2012-02-23T15:27:59+00:00" user="twilson" more_sessions="false">
<Session id="ID742247692" realTimeID="4306650378">
<Visitor id="5390643113837">
<ip>128.XXX.XX.XX</ip>
<agent>MSIE 8.0</agent>
</Visitor>
</Session>
<Session id="ID742247695" realTimeID="4306650379">
<Visitor id="7110455516320">
<ip>173.XX.XX.XXX</ip>
<agent>Chrome 17.0.963.56</agent>
</Visitor>
</Session>
</Report>
注意すべき点の1つは、xmlファイルには、テーブルにロードする必要のあるいくつかのオブジェクトが含まれていることです。上記の例は、2行のデータのみを対象としています。私はデータを接続してOracleにロードするプロセス全体に精通しており、txtのETLを実行する同様のスクリプトをセットアップしました。とcsv。phpを使用したファイル。残念ながら、この場合、データはxmlに保存されます。csvをロードするときに採用したアプローチ。ファイルは、データを配列にロードし、そこから続行します。
私は似たようなものを使用でき、おそらくそれぞれまたは似たようなものに変数を作成できると確信していますが、xmlを使用してそれを行う方法はあまりよくわかりません。ファイル。
$xml = simplexml_load_file('C:/Dev/report.xml');
echo $xml->Report->Session->Visitor->agent;
上記のコードでは、各訪問者に関連付けられているエージェントを返すだけです。これはエラーを返します'11行目のC:\ PHP\chatTest.phpで非オブジェクトのプロパティを取得しようとしています'
最終的な結果は、私が提供した例と同様のテーブルにデータをロードすることです。テーブルに2つの行をロードすると、以下のようになりますが、取得できれば、それを処理できると思います。データを配列などに変換します。
IP|AGENT
128.XXX.XX.XX MSIE 8.0
173.XX.XX.XXX Chrome 17.0.963.56
どんな助けでも大歓迎です。
改訂されたコード:
$doc = new DOMDocument();
$doc->load( 'C:/Dev/report.xml' );
$sessions = $doc->getElementsByTagName( "Session" );
foreach( $sessions as $session )
{
$visitors = $session->getElementsByTagName( "Visitor" );
foreach( $visitors as $visitor )
$sessionid = $session->getAttribute( 'realTimeID' );
{
$ips = $visitor->getElementsByTagName( "ip" );
$ip = $ips->item(0)->nodeValue;
$agents = $visitor->getElementsByTagName( "agent" );
$agent = $ips->item(0)->nodeValue;
echo "$sessionid- $ip- $agent\n";
}}
?>