0

私はすでにいくつかの質問をしましたが、それらはすぐに答えられ、この時点に到達するのに役立ちましたが、小さな問題に遭遇しました. それらの中で別の質問をするのではなく、新しい質問を作成するのが最善だと思いました. 同じ属性を持つ各 varValue (以下に示す) の複数の要素を含む xml ファイルを解析しようとしています。これらの値が存在する場合、スクリプトは正常に動作しますが、除外されている場合は警告が表示されます。以下の例では、email と send_transcript の両方が 2 番目のセッションから除外されています。私の最終目標は、上記のケースを除いて正常に機能するオラクルにデータをインポートすることです。

以下は、私が使用している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">address1@myexample.com</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;

スクリプトを実行すると、Undefined variable: email という警告が表示されます。前述のとおり、フォームの電子メール フィールドはオプションであり、多くの場合除外されているため、このメッセージを受け取りました。

私の望む出力は次のようになります。

Sessionid|email|send_transcript
4306650378,address1@myexample.com,yes
4306650379,'',''

null値を説明する方法を知っている人はいますか? コードの先頭に変数 $email = '' を作成すると、エラーを無視するように見えますが、null ではなく前の値が繰り返されますか?

4

1 に答える 1

1

第 2 レベルの foreach ステートメントの前に変数を初期化するだけです。

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

すべてがうまくいくはずです!

于 2012-05-31T16:03:40.793 に答える