2013-12-21 91 views
1

我正在努力生成一個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塊)似乎吞噬了其他所有內容。

您能否幫我解決這個問題?

+0

而是連接字符串生成XML的,使用一個庫,測試和工作的確如此。有多個,一個入門級的相關問答現場是:[mysql到php到xml顯示空白時間](http://stackoverflow.com/q/16488993/367456)。處理起來更容易,代碼更少,更安全。 – hakre

回答

0

您應該添加>在每個CDATA聲明的末尾(不只是title元素,所有的),像這樣:

<TITLE><?php echo '<![CDATA[' . $product['product_name'] . ']]>' ?></TITLE> 
+0

非常感謝!我想知道我沒有看到。 –

+0

也許是因爲它很愚蠢?看到實際上給你一些創建XML對象的重複問題,那麼你不需要擔心這些(和其他)問題。正如你可能想象的那樣,你不需要自己編寫XML,因爲問題已經解決了。 – hakre