2012-04-17 70 views
0

我應該將xml作爲xml標記中的字符串發送到Web服務。發送的文件顯示爲「不符合」,所以我只是想檢查並確保我正確發送它,以便知道錯誤來自它如何發送而不是xml的實際內容。我使用PHP,所以我創建我要發送的XML字符串,這是正確的方式發佈xml作爲一個字符串?

$send_xml = '<?xml version="1.0" encoding="UTF-8"?> 
      <myFile><stuff></stuff></myFile>'; 

我在外部XML像這樣把它放在內容標籤之間:

<content><![CDATA["'.$send_xml.'"]]></content> 

不該」這發送我的「$ send_xml」作爲一個字符串?

+0

那麼,你試過嗎? – 2012-04-17 19:31:52

+0

是的,我提到的發送文件顯示爲「不符合」是結果。 – xena 2012-04-17 19:44:19

回答

0

如果$send_xml本身包含CDATA塊,您可能會考慮不使用CDATA塊,因爲CDATA塊會中斷。

您可能想要在將其放入xml字符串之前轉義$send_xml字符串。

PHP可以通過htmlentities函數進行這種轉義。

0

我懷疑你有太多的引號。

嘗試:

<content><![CDATA['.$send_xml.']]></content> 

...相反。

(假設你的PHP字符串爲單引號),你的代碼將產生:

<content><![CDATA["<?xml version="1.0" encoding="UTF-8"?><myFile><stuff></stuff></myFile>"]]></content> 

...它應該可能只是:

<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?><myFile><stuff></stuff></myFile>]]></content> 

...沒有內部XML被包裹在雙引號中。

或者,這樣的:

<content>'.htmlspecialchars($send_xml, ENT_COMPAT).'</content> 

...應該在分析時產生相同的結果,通過在內部XML轉義的特殊字符。

+0

我有同樣的想法,我沒有用雙引號試過,似乎沒有什麼區別。我認爲你是對的,但我可能會擺脫它們。 – xena 2012-04-17 19:40:56

+0

我確實認爲你應該調查通過CDATA的逃跑路線,因爲@bardiir指出(如果內部XML包含CDATA部分,它將會中斷)(並且我慚愧地沒有注意到)。你說'發送的文件顯示爲「不符合」 - 是遠程服務器還是XML驗證器? – DaveRandom 2012-04-17 19:45:38

+0

不符合規定的狀態就是我在我的帳戶的「門戶」網頁上列出的內容。我不知道這是如何確定的,我只知道這是我想要的:) – xena 2012-04-17 20:05:55

相關問題