2011-06-11 8 views
0

특정 쿼리를 xml 파일로 내보낼 필요가 있습니다. 나는 파일이 만들어지고 데이터가 반출된다는 점에서이 작업을 수행하지만 파일이 반출되고 표시되지 않으므로 화면에 다음 오류가 표시됩니다.Zend Framework에서 Doctrine 쿼리 결과를 XML 파일로 내 보냅니다.

This page contains the following errors: 

error on line 3 at column 1: Extra content at the end of the document 

난 당신의 대부분은 알고하지만 난 내 보낸 단지 보고서가 저장되어있는 사용자에게 확인 메시지를 표시하거나 생각 할 수있는 방법이 나는이에 새로 온 것을 인정한다 나는 이것에 대해 완전히 잘못된 길로 가겠습니까?

내 코드

내 컨트롤러

public function init() 
{ 
    // allow certain reports to be exported to xml 
    // initialize context switch helper 
    $contextSwitch = $this->_helper->getHelper('contextSwitch'); 
    $contextSwitch->addActionContext('newsletterexport', 'xml') 
       ->initContext();  

}

public function newsletterexportAction() 

{ 
$q = Doctrine_Query::create() 
    ->select('c.firstname,c.lastname,c.address1,c.address2,c.address3,t.county') 
    ->from('PetManager_Model_Clients c') 
    ->leftJoin('c.PetManager_Model_Counties t') 
    ->where('c.consentToNews=1'); 
    $result = $q->fetchArray(); 
     if (count($result) >= 1) { 
    $this -> view -> records = $result; 
    } 
} 

편집 아래

제안 내가 내 컨트롤러에 xml.phtml의 코드를 이동하려고 좋아 저장을 사용하여 문서를 저장하려고했지만 이제는 XML 문서의 시작 부분이 나타납니다. 아래 그림과 같이 문서는 저장되지만 레코드는 문서에 저장되지 않습니다.

public function newsletterexportAction() 
{ 
    $q = Doctrine_Query::create() 

    ->select('c.firstname,c.lastname,c.address1,c.address2,c.address3,t.county') 
    ->from('PetManager_Model_Clients c') 
    ->leftJoin('c.PetManager_Model_Counties t') 
    ->where('c.consentToNews=1'); 
    $result = $q->fetchArray(); 
     if (count($result) >= 1) { 
      //$this -> view -> records = $result; 

      $docpref="newsletterexport"; 
      $docDate=date('y-m-d'); 
      $ext=".xml"; 
      $docname=$docpref.$docDate.$ext; 

      // create XML document 
      $dom = new DOMDocument('1.0', 'utf-8'); 

      // create root element 
      $root = $dom->createElementNS('http://petmanager','petmanager:document');  
      $dom->appendChild($root); 

       // convert to SimpleXML 
      $xml = simplexml_import_dom($dom); 

      // add resultset elements 
      $records = $xml->addChild('records'); 
      foreach($this->$result as $r){ 
      $record = $records->addChild('record'); 
      $record->addChild('firstName',$this->escape($r['firstName'])); 
      $record->addChild('lastName',$this->escape($r['lastName'])); 
      $record->addChild('address1',$this->escape($r['address1'])); 
      $record->addChild('address2',$this->escape($r['address2'])); 
      $record->addChild('address3',$this->escape($r['address3'])); 
      $record->addChild('county',$this->escape($r['PetManager_Model_Counties']['county'])); 
    }//end of foreach 
     // saave document 
     $xml->saveXML(); 
     $dom->save('D:/reports/exports/'.$docname.''); 

    } 

답변

0

DomDocument::saveXML()이 편집과 같은

<?xml version="1.0" encoding="utf-8"?> 
<petmanager:document xmlns:petmanager="http://petmanager"><petmanager:records/></petmanager:document> 

내 컨트롤러 코드는 파일 경로를 가지고 나던 - 그것은 텍스트로 XML 문서를 반환합니다. 개봉 된 파일을 직접 파일로 저장하려면 DomDocument::save()을 사용하십시오.

귀하의 phtml에있는 모든 논리가 귀하의 컨트롤러에 있어야합니다. 컨텍스트를 xml로 설정했기 때문에 뷰는 HTML이 아닌 XML을 브라우저로 출력합니다 ... 그래서 ID가 XML로 인코딩되지 않은 경우 확인 메시지를 표시하는 것이 바람직하지 않습니다. 그렇지 않으면 기본 컨텍스트를 사용해야합니다. (HTML). 당신이 웹 서버에 파일을 저장하고 확인을 표시하려는 경우 당신이 할 것입니다 그래서 :

public function exportXmlAction(){ 
    // remove the context switch from init 
    // do your doctrine stuff 
    // build the xml DOM as $xml 
    $xml->save('path/to/file'); 
    $this->message = 'File was exported successfully!'; 
} 

// in your phtml 
<?php echo $this->message; ?> 

당신이 화면에 XML을 표시하려면 :

public function exportXmlAction(){ 
    // do your doctrine stuff 
    // build the xml DOM as $xml 
    $this->xmlDom = $xml; 
} 

// in your phtml 
<?php echo $this->xmlDom->saveXml(); ?> 

그래도 난이 문제는 whay입니다 사용자가 xml을 서버로 보내지 않겠습니까? DomDocument::save()으로 전화를 걸면 사용자 컴퓨터가 아닌 서버의 경로에 해당 파일을 저장하므로 사용자가 액세스 할 수없는 서버로 XML을 내보낼 수있는 점은 무엇입니까?

+0

답장을 보내 주셔서 감사합니다. 개발중인 앱이 인트라넷에서 실행되므로 파일에 관리자가 액세스 할 수 있습니다. 나는 당신의 제안을 시도했지만 그것은 나를 위해 일하고있는 것 같지 않습니다, 죄송합니다. xml 파일을 만드는 것과 관련하여 PHP와 XML을 사용 해보지 않았습니다. – Graham

+0

@Graham : 컨텍스트 전환을 해제 했습니까? 파일을 저장 했습니까? 어떤 오류가 있었습니까? – prodigitalson

+0

답장을 보내 주셔서 감사합니다. 컨텍스트 스위치를 껐습니다. 위의 코드를 phtml 파일로 옮겨서 작동 시켰습니다. 컨트롤러에서 작동하지 않는 phtml 파일로 이동했습니다. – Graham

관련 문제