我正在努力生成一個XML,其中包含以特定XML格式從在線商店檢索的產品以導入批發商網站。它是通過這個網址得到:生成XML數據時出錯
http://movilterra.com/solostocks/
的方式,我做的是通過產品的行列,以發送到輸出這個XML模板:
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>
<SINCRO_DETAILS>
<COMPANY></COMPANY>
<COUNTRY>67</COUNTRY>
<PRODUCTS>
<?php
foreach ($products as $product):
?>
<PRODUCT>
<PRODUCT_ID><?php echo $product['id_product'] ?></PRODUCT_ID>
<TITLE><?php echo '<![CDATA[' . $product['product_name'] . ']]' ?></TITLE>
<DESCRIPTION><?php echo '<![CDATA[' . $product['description_short'] . ']]' ?></DESCRIPTION>
<SECTOR><?php echo $product['sector'] ?></SECTOR>
<PRICE><?php echo $product['price'] ?></PRICE>
<SHIPPING>48</SHIPPING>
<MINIMUM><?php echo $product['minimal_quantity'] ?></MINIMUM>
<UNIT_TYPE>9</UNIT_TYPE>
<PHOTOS>
<PHOTO><?php echo $product['imagen'] ?></PHOTO>
</PHOTOS>
<KEYWORDS>
<?php
$keywords = explode(',', $product['meta_keywords']);
foreach ($keywords as $keyword):
?>
<KEYWORD><?php echo '<![CDATA[' . $keyword . ']]' ?></KEYWORD>
<?php
endforeach;
?>
</KEYWORDS>
</PRODUCT>
<?php
endforeach;
?>
</PRODUCTS>
</SINCRO_DETAILS>
注意CDATA塊,因爲它們可能是問題的根源。 所有沒有數字的字符串,通過它轉換成他們喜歡這樣的功能被預先過濾:
utf8_encode(preg_replace('/[\[\]\!]|CDATA/i', '', strip_tags($str)))
我用函數utf8_encode()防止波形符和其他字符的錯誤。但是我仍然有此錯誤:行1247
錯誤,在第18欄:在文檔
,每次我重新加載URL,錯誤行變化的末尾附加內容。如果我檢查代碼,我發現第一個TITLE標籤(帶有CDATA塊)似乎吞噬了其他所有內容。
您能否幫我解決這個問題?
而是連接字符串生成XML的,使用一個庫,測試和工作的確如此。有多個,一個入門級的相關問答現場是:[mysql到php到xml顯示空白時間](http://stackoverflow.com/q/16488993/367456)。處理起來更容易,代碼更少,更安全。 – hakre