xml无效-错误1002


xml is not valid - error 1002

我被这个似乎无法解决的错误所震惊。我得到一个XML无效,错误1002。

我已经在线检查了某些xml验证器,它们表明xml格式良好。xml是用来查询api的,但它似乎不起作用。

有人知道我做错了什么吗。

<SERVICE_SEARCH_REQUEST>
    <VERSION_HISTORY>APPLICATION_NAME=AppName XML_FILE_NAME =XMLFileName LICENCE_KEY=xxx-3939-xxxx-xxxx-xxx TS_API_VERSION = TSAPIVersion>
        <XML_VERSION_NO>3.0</XML_VERSION_NO>
    </VERSION_HISTORY>
    <GEO_LOCATION_NAME>London</GEO_LOCATION_NAME>
    <START_DATE>12 Jan 16</START_DATE>
    <NUMBER_OF_NIGHTS>1</NUMBER_OF_NIGHTS>
    <AVAILABLE_ONLY>TRUE</AVAILABLE_ONLY>
    <GET_START_PRICE>true</GET_START_PRICE>
    <ROOM_REPLY>
        <ANY_ROOM/>
    </ROOM_REPLY>
    <ROOMS_REQUIRED>
        <ROOM>
            <OCCUPANCY>2</OCCUPANCY>
            <QUANTITY>1</QUANTITY>
        </ROOM>
        <ROOM>
            <OCCUPANCY>3</OCCUPANCY>
            <QUANTITY>1</QUANTITY>
        </ROOM>
    </ROOMS_REQUIRED>
</SERVICE_SEARCH_REQUEST>

我得到的回复是:

Array ( [@attributes] => Array ( [CATEGORY] => XML Validation ) [VERSION_HISTORY] => Array ( [@attributes] => Array ( [APPLICATION_NAME] => AppName [XML_FILE_NAME] => XMLFileName [LICENCE_KEY] => LicenceKey [TS_API_VERSION] => TSAPIVersion ) [XML_VERSION_NO] => XMLVersionNumber ) [ERROR_NUMBER] => 1002 [ERROR_DESC] => XML is not valid ) 

更新的php用法:

$header[] = "Accept: application/xml";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch,CURLOPT_POST,5);
curl_setopt($ch,CURLOPT_POSTFIELDS,$XML);
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec($ch);
$response = simplexml_load_string($response);
//$desired_array = json_decode(json_encode((array);

print_r($response);
?>

更新错误:

警告:simplexml_load_string():实体:第1行:分析器错误:文档标记为UTF-16,但第36行有UTF-8内容
警告:simplexml_load_string():第36行的<?xml version="1.0" encoding="UTF-16"?><SERVICE_SEARCH_RESPONSE><VERSION_HISTORY
警告:第36行上的simplexml_load_string():^

此行:

<VERSION_HISTORY>APPLICATION_NAME=AppName XML_FILE_NAME =XMLFileName LICENCE_KEY=xxx-3939-xxxx-xxxx-xxx TS_API_VERSION = TSAPIVersion>

不是有效的XML。>没有关闭元素。您可能希望将这些值作为属性。尝试:

<VERSION_HISTORY APPLICATION_NAME='"AppName'" XML_FILE_NAME ='"XMLFileName'" LICENCE_KEY='"xxx-3939-xxxx-xxxx-xxx'" TS_API_VERSION = '"TSAPIVersion'">

根据您的更新,我在这里转义了双引号,因为听起来您在PHP中使用双引号封装字符串。或者,您可以使用单引号。

<VERSION_HISTORY APPLICATION_NAME='AppName' XML_FILE_NAME ='XMLFileName' LICENCE_KEY='xxx-3939-xxxx-xxxx-xxx' TS_API_VERSION = 'TSAPIVersion'>

在这两种情况下都使用PHP,如

$xml = "<VERSION_HISTORY APPLICATION_NAME='AppName' XML_FILE_NAME ='XMLFileName' LICENCE_KEY='xxx-3939-xxxx-xxxx-xxx' TS_API_VERSION = 'TSAPIVersion'>";

$xml = "<VERSION_HISTORY APPLICATION_NAME='"AppName'" XML_FILE_NAME ='"XMLFileName'" LICENCE_KEY='"xxx-3939-xxxx-xxxx-xxx'" TS_API_VERSION = '"TSAPIVersion'">";

应有效。