2013-12-21 2 views
1

온라인 상점에서 특정 XML 형식으로 검색된 제품을 사용하여 도매 업체 사이트로 가져 오기 위해 XML을 생성하는 데 어려움을 겪고 있습니다. 그것은이 URL을 통해이라도 :XML 데이터 생성 중 오류 발생

http://movilterra.com/solostocks/

방법 나는 그것이 출력에 전송이 XML 템플릿에 제품의 배열을 통과 수행하십시오 CDATA 블록

<?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> 

주 아마도 문제의 근원 일 수 있기 때문입니다. 내가이 물결표 및 다른 문자의 오류를 방지하기 위해() utf8_encode를 사용

utf8_encode(preg_replace('/[\[\]\!]|CDATA/i', '', strip_tags($str))) 

: 숫자하지 모든 문자열은 이전과 같이 그들을 변환하는 기능을 통해 여과되고있다. 그러나 나는 아직도이 오류가 있어요 : 라인 1247에

오류를 열 18 : 나는 URL 오류 라인 변경을 다시로드 문서

와 매번의 끝에 추가 컨텐츠를. 코드를 검사하면 첫 번째 TITLE 태그 (CDATA 블록 포함)가 다른 모든 콘텐츠를 삼키는 것으로 보입니다.

제발 저를 도와 주시겠습니까?

+0

를 대신 XML을 생성하는 문자열을 연결의,하는 라이브러리를 사용 테스트를 거쳐 정확히 작동합니다. 여러 항목이 있는데, 엔트리 레벨과 관련된 Q & A는 다음과 같습니다. [PHP에서 XML 로의 PHP는 빈 나이를 표시합니다] (http://stackoverflow.com/q/16488993/367456). 처리가 쉽고 코드가 적으며 안전합니다. – hakre

답변

0

당신은과 같이, 각 CDATA 선언의 끝 (NO 제목 만 요소, 그들 모두)에서>를 추가해야합니다 :

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

정말 고마워! 나는 내가 어떻게 보지 않았는지 궁금해. –

+0

아마 바보이기 때문에? 실제로 XML을 작성하기위한 객체를 제공하는 중복 질문을 참조하십시오. 그런 다음 이러한 (및 기타) 문제에 대해 걱정할 필요가 없습니다. 이미 상상할 수 있듯이 문제가 이미 해결 되었기 때문에 XML을 직접 작성할 필요는 없습니다. – hakre

관련 문제