使用PHP解析xml中具有空值的变量

使用PHP解析xml中具有空值的变量,php,simplexml,Php,Simplexml,我已经问了一些问题,这些问题很快得到了回答,并帮助我达到了这一点,但我遇到了一个小问题。我认为最好是提出一个新问题,而不是在这些问题上再问一个问题。我试图解析一个xml文件,该文件包含具有相同属性的每个varValue(如下所示)的多个元素。当这些值存在时,我的脚本工作正常,但是如果它们被排除,我会收到警告。在下面的示例中,电子邮件和send_成绩单都被排除在第二次会议之外。我的最终目标是将数据导入到oracle中,除了上面提到的情况外,oracle工作正常 下面是我正在使用的xml文件的一个示

我已经问了一些问题,这些问题很快得到了回答,并帮助我达到了这一点,但我遇到了一个小问题。我认为最好是提出一个新问题,而不是在这些问题上再问一个问题。我试图解析一个xml文件,该文件包含具有相同属性的每个varValue(如下所示)的多个元素。当这些值存在时,我的脚本工作正常,但是如果它们被排除,我会收到警告。在下面的示例中,电子邮件和send_成绩单都被排除在第二次会议之外。我的最终目标是将数据导入到oracle中,除了上面提到的情况外,oracle工作正常

下面是我正在使用的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>
当我执行脚本时,我收到一个警告,其中声明了未定义的变量:email。正如我上面提到的,我收到这封邮件是因为我们表单中的email字段是可选的,并且经常被排除在外

我期望的输出如下

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

有人知道我如何解释空值吗?如果我在代码的开头创建一个变量$email='',那么它似乎会忽略错误,但是它会重复前面的值而不是null

只需在第二级foreach语句之前初始化变量:

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

那么一切都会好起来的

正如我上面提到的,我尝试了这种方法,而且似乎只对第一个空值有效。在这之后,它会重复上一个值作为任何空值的循环。xml文件通常非常大,这只是一个小示例。您是否尝试过在foreach内部初始化?我将编辑答案以反映这一点。
foreach($xml_object->Session as $session) {
    $email = '';
    $identifier = '';
    $sendTranscript = '';
    $sessionid = $session['realTimeID'];
    ...