2012-05-31 24 views
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?

回答

1

第二級的foreach語句之前就初始化變量:

foreach($xml_object->Session as $session) { 
    $email = ''; 
    $identifier = ''; 
    $sendTranscript = ''; 
    $sessionid = $session['realTimeID']; 
    ... 

一切都應該工作正常了!

+0

正如我上面提到的,我嘗試了這種方法,似乎只對第一個空值有效。之後,它重複以前的值作爲循環的任何空值。 xml文件通常非常大,這只是一個小例子。 – tsouth4

+0

您是否嘗試過在foreach內初始化?我將編輯答案以反映這一點。 – alganet

+0

啊,那就是訣竅。萬分感謝... – tsouth4