雖然我已經編程了幾年,但我對PHP還是比較新的。使用PHP將XML數據加載到Oracle
我正在開發一個項目,最終目標是在夜間基礎上將某個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>
有一點要注意的是,XML文件將包含幾個對象,我需要加載到我的表,上面的例子也只是針對兩行數據。我熟悉將數據連接和加載到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中的非對象的屬性'
最終結果是我將數據加載到類似於我提供的示例將加載到我的表中的兩行看起來類似於下面但是我認爲我可以處理,如果我能夠獲得數據到數組或類似的東西。
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";
}}
?>
與Oracle沒有多大關係,而是在PHP中解析XML。 –
是的,但我的最終目標是將數據加載到oracle數據中。如果我可以將數據轉換爲數組或類似的數據,我應該可以從那裏處理它。 – tsouth4
請參閱我的答案中的代碼:) PHP DOM文檔(http://www.php.net/manual/en/book.dom.php)將幫助您開始使用(特別是此部分http://www.php。淨/手動/ EN/domdocument.getelementsbytagname.php)。 –