0
我已經問了幾個問題已經很快回答,並幫助我達到了這一點,但是我遇到了一個小問題。我認爲最好是創建一個新問題,而不是在另一個問題中提出另一個問題。我試圖解析一個xml文件,其中包含每個varValue(如下所示)具有相同屬性的多個元素。當這些值存在時,我的腳本正常工作,但如果它們被排除,我會收到警告。在下面的例子中,email和send_transcript都被排除在第二個會話之外。我的最終目標是將數據導入到oracle中,除了上面提到的情況外,它可以正常工作。使用PHP來解析xml中的空值的變量
下面是我正在使用的xml文件的一個示例。
<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">
<VarValues>
<varValue id="ID2051978" source="PreChat" sourceName="null" time="2012-02-23T00:07:07+00:00" name="identifier">Andy</varValue>
<varValue id="ID2051979" source="Internal" sourceName="null" time="2012-02-23T01:09:42+00:00" name="DisconnectedBy">VisitorClosedWindow</varValue>
<varValue id="ID2055925" source="PostChat" sourceName="null" time="2012-02-23T01:09:53+00:00" name="send_transcript">yes</varValue>
<varValue id="ID2055926" source="Operator" sourceName="null" time="2012-02-23T01:13:17+00:00" name="email">[email protected]</varValue>
<varValue id="ID2073144" source="PreChat" sourceName="null" time="2012-02-23T00:07:07+00:00" name="survey0373014">a group, team or business</varValue>
<varValue id="ID2074007" source="Operator" sourceName="null" time="2012-02-23T01:13:17+00:00" name="survey99630314">Pricing</varValue>
<varValue id="ID2075240" source="Operator" sourceName="null" time="2012-02-23T01:13:17+00:00" name="survey99630317">No</varValue>
<varValue id="ID2075243" source="Operator" sourceName="null" time="2012-02-23T01:13:17+00:00" name="survey99630320">Dont Know</varValue>
<varValue id="ID2083900" source="PostChat" sourceName="null" time="2012-02-23T01:09:53+00:00" name="survey99630223">none of the above</varValue>
<varValue id="ID2119346" source="Internal" sourceName="null" time="2012-02-23T00:06:20+00:00" name="LP_Visitor_Category">0</varValue>
<varValue id="ID2329945" source="PreChat" sourceName="null" time="2012-02-23T00:07:07+00:00" name="survey23360124">55379</varValue>
</VarValues>
</Session>
<Session id="ID742247695" realTimeID="4306650379">
<VarValues>
<varValue id="ID2051978" source="PreChat" sourceName="null" time="2012-02-23T00:04:37+00:00" name="identifier">Aram</varValue>
<varValue id="ID2051979" source="Internal" sourceName="null" time="2012-02-23T00:26:39+00:00" name="DisconnectedBy">RepStoppedChat</varValue>
<varValue id="ID2073144" source="PreChat" sourceName="null" time="2012-02-23T00:04:37+00:00" name="survey0373014">a group, team or business</varValue>
<varValue id="ID2074007" source="Operator" sourceName="null" time="2012-02-23T00:46:39+00:00" name="survey99630314">Turn Time</varValue>
<varValue id="ID2075240" source="Operator" sourceName="null" time="2012-02-23T00:46:39+00:00" name="survey99630317">No</varValue>
<varValue id="ID2075243" source="Operator" sourceName="null" time="2012-02-23T00:46:39+00:00" name="survey99630320">Likely</varValue>
<varValue id="ID2119346" source="Internal" sourceName="null" time="2012-02-23T00:04:23+00:00" name="LP_Visitor_Category">0</varValue>
<varValue id="ID2329945" source="PreChat" sourceName="null" time="2012-02-23T00:04:37+00:00" name="survey23360124">07452</varValue>
</VarValues>
</Session>
</Report>
這裏是我使用的解析文件,該文件中的代碼。
$xml_object = simplexml_load_file('C:/PHP/sessions.xml');
foreach($xml_object->Session as $session) {
$sessionid = $session['realTimeID'];
foreach($session->VarValues->varValue as $varValue) {
if($varValue['name'] == 'email') {
$email = (string) $varValue;
}
}
foreach($session->VarValues->varValue as $varValue2) {
if($varValue2['name'] == 'identifier') {
$identifier= (string) $varValue2;
}
}
foreach($session->VarValues->varValue as $varValue5) {
if($varValue5['name'] == 'send_transcript') {
$sendTranscript= (string) $varValue5;
}
}
$s = "$sessionid,'$email',$sendTransript'";
echo $s;
當我執行腳本我收到其中規定未定義變量警告:電子郵件。正如我上面提到的,我收到了這條消息,因爲我們表單中的電子郵件字段是可選的並且經常被排除。
我希望的輸出如下。
Sessionid|email|send_transcript
4306650378,[email protected],yes
4306650379,'',''
任何人都知道我可以如何解釋空值?如果我在代碼的開頭創建了一個變量$ email ='',那麼它似乎忽略了錯誤,但是它會重複以前的值而不是null?
正如我上面提到的,我嘗試了這種方法,似乎只對第一個空值有效。之後,它重複以前的值作爲循環的任何空值。 xml文件通常非常大,這只是一個小例子。 – tsouth4
您是否嘗試過在foreach內初始化?我將編輯答案以反映這一點。 – alganet
啊,那就是訣竅。萬分感謝... – tsouth4