2015-08-21 36 views
1

我已在返回以下PHP的XML響應開始標記預期,但我看到它在的var_dump

的var_dump:

string(799) "<?xml version="1.0" encoding="ISO-8859-1"?> <serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service" xmlns:com="http://www.webex.com/schemas/2002/06/common" xmlns:att="http://www.webex.com/schemas/2002/06/service/attendee"><serv:header><serv:response><serv:result>SUCCESS</serv:result><serv:gsbStatus>BACKUP</serv:gsbStatus></serv:response></serv:header><serv:body><serv:bodyContent xsi:type="att:registerMeetingAttendeeResponse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><att:register><att:attendeeID>29281003</att:attendeeID></att:register></serv:bodyContent></serv:body></serv:message>" 

我想要使用的SimpleXML,但我第一驗證輸出使用此功能(抱歉,不記得在那裏我發現它計算器):isXML的

function isXML($xml){ 
      libxml_use_internal_errors(true); 

      $doc = new DOMDocument('1.0', 'utf-8'); 
      $doc->loadXML($xml); 

      $errors = libxml_get_errors(); 

      if(empty($errors)){ 
       return true; 
      } 

      $error = $errors[0]; 
      if($error->level < 3){ 
       return true; 
      } 

      $explodedxml = explode("r", $xml); 
      $badxml = $explodedxml[($error->line)-1]; 

      $message = $error->message . ' at line ' . $error->line . '. Bad XML: ' . htmlentities($badxml); 
      return $message; 
     } 

結果()

Start tag expected, '<' not found at line 1. Bad XML: &lt;?xml ve 

我看到 '<',除非後續代碼var_dump是不準確的。我儘可能地打破了這件事。任何幫助將不勝感激。

+0

您的xml被編碼爲有效的HTML實體。當你'var_dump'時,看看源代碼而不是你的瀏覽器顯示的內容。例如,您會看到「<」字符已被替換爲「<」。尋找像[html_entity_decode()](http://php.net/manual/en/function.html-entity-decode.php)這樣的函數。 –

+1

驗證器功能和xml內的不同字符/編碼 – RamRaider

回答

1

我扯下了問題倒多了幾分:

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?> 
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service"/>'; 

// escape xml special chars - this will provoke the error 
$xml = htmlspecialchars($xml); 

$document = new DOMDocument(); 
$document->loadXml($xml); 

輸出:

Warning: DOMDocument::loadXML(): Start tag expected, '<' not found in Entity, line: 1 in /tmp/... 

會發生什麼事是你的XML仍然逃脫/編碼。你不會在瀏覽器中看到它,因爲特殊字符是由它來解釋的。它將響應(包括var_dump())視爲HTML。打開源視圖來檢查實際值。

調試讀取XML字符串的源代碼,您可能需要更改它或在其中添加html_entity_decode()

建議:你是XML使用命名空間,所以你最好使用DOM + Xpath。退房DOMXpath::evaluate()

+0

哇,謝謝。我一直認爲var_dump給了我原始的輸出/響應。對不起,第一次不得不處理XML only API ..和這樣的XML – aibarra

+0

它的確如此,但卻是純文本。瀏覽器認爲響應是HTML。所以瀏覽器尋找&...;,並認爲它們是它必須解碼的實體。 – ThW

相關問題