语法分析器错误:需要开始标记,'<';找不到


parser error : Start tag expected, '<' not found

我是第一次使用PHP。我正在使用php示例在ebay沙箱上上传图像。我在运行PHP文件时遇到以下错误:

PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 69
PHP Warning:  simplexml_load_string(): HTTP/1.1 200 OK in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 69
PHP Warning:  simplexml_load_string(): ^ in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 69
PHP Notice:  Trying to get property of non-object in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 92
PHP Notice:  Trying to get property of non-object in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 93
PHP Notice:  Trying to get property of non-object in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 93
PHP Notice:  Trying to get property of non-object in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 94
PHP Notice:  Trying to get property of non-object in /home/nish/stuff/market place/test/php5/UploadImage/UploadSiteHostedPictures.php on line 94

相关线路为:

69. $respXmlObj = simplexml_load_string($respXmlStr);     // create SimpleXML object from string for easier parsing
                                                      // need SimpleXML library loaded for this
92. $ack        = $respXmlObj->Ack;
93. $picNameOut = $respXmlObj->SiteHostedPictureDetails->PictureName;
94. $picURL     = $respXmlObj->SiteHostedPictureDetails->FullURL;

我能理解的是respXMLObj没有正确设置。我已检查是否已启用simleXML支持。

有人能帮我调试一下吗。感谢

您引用的代码有以下行:

//curl_setopt($connection, CURLOPT_HEADER, 1 ); // Uncomment these for debugging

似乎您取消了对这些的注释。这将导致在响应中获取HTTP标头。这对于调试来说是可以的,但它将在simplexml_load_string中创建XML解析错误。

要么重新注释掉它,要么将0作为它的值。

在我的例子中。我只是删除了XML文件开头的不可见字符BOM。如何做到这一点取决于您的文本编辑器。

$hasError = false;
if ( $resp == 'Internal Server Error' || empty($resp) )
{
    $hasError = true;
}
if ( ! $hasError )
{                      
    $aux    = !empty($resp) ? explode('', $resp) : NULL;
    $temp   = utf8_decode(trim($aux[0]));               
    $xml    = simplexml_load_string($temp); 
}

尝试使用simplexml_load_file('localpath')而不是simplexml_load_string()。我今天(9年后)遇到了同样的问题,这就是我的解决方案。

做一个var_dump($respXmlStr);我猜这个字符串不是有效的XML。

根据simplexml加载字符串文档,第一个参数应该是A well-formed XML string-http://php.net/manual/en/function.simplexml-load-string.php