文档末尾的XML Extra内容

时间:2011-07-29 16:02:19

标签: php xml

我收到了这个错误:

error on line 4 at column 1: Extra content at the end of the document

使用此代码:

    $this->load->database();

    function parseToXML($htmlStr) 
    { 
        $xmlStr=str_replace('<','&lt;',$htmlStr);     
        $xmlStr=str_replace('>','&gt;',$xmlStr); 
        $xmlStr=str_replace('"','&quot;',$xmlStr); 
        $xmlStr=str_replace("'",'&#39;',$xmlStr); 
        $xmlStr=str_replace("&",'&amp;',$xmlStr); 
        return $xmlStr; 
    } 
    $query = $this->db->get('comboTable');
    $query = $query->result_array();
    header("Content-type: text/xml");
    // Start XML file, echo parent node
    echo '<markers>';
    // Iterate through the rows, printing XML nodes for each
    foreach ($query as $row)
    {
      // ADD TO XML DOCUMENT NODE
      echo '<marker ';
      echo 'name="' . parseToXML($row['restaurantName']) . '" ';
      echo 'address="' . parseToXML($row['address']) . '" ';
      echo 'lat="' . $row['lat'] . '" ';
      echo 'lng="' . $row['lng'] . '" ';
      echo '/>';    
    }
    // End XML file
    echo '</markers>';  

2 个答案:

答案 0 :(得分:1)

如果没有看到文本输出本身,就不可能确切知道,但我立即注意到了一些事情:

  1. 要对此进行调试,请发送标头header("Content-type: text");
  2. parseToXML试图重新发明轮子,使用htmlentities
  3. (此以及以下内容应无关紧要,您应该使用htmlentities)在用实体替换其他所有内容后,您将替换&。这意味着您将获得&amp;lt;而不是&lt;
  4. str_replace将数组作为参数,您最好使用它们。

答案 1 :(得分:0)

在这个同样的问题上花了大约3天之后,我找到了最好和最简单的方法来解决这个问题,可能会将以下标题添加到代码中:

header("Content-type: text/xml");
        header( 'Content-Disposition: attachment; filename='.$_SESSION['WorkTable'].'_contacts-'.$date.'.xml');

在以下行之间将此内容添加到您的代码中:

$query = $query->result_array();
//add it here <--
header("Content-type: text/xml");