2012-07-06 11 views
1

나는이 질문에 대한 답변으로 주로 대답을 연구했습니다 Convert Tab delimited text file to XML, CSV 파일을 한 줄씩 읽고 그 결과를 XML 파일로 변환하는 다음 스크립트를 함께 연결했습니다 .PHP로 CSV 파일을 PHP로 XML로 변환

CSV 파일은 이러한 방식으로 세 개 이상의 세포 라인이 있습니다

홍길동 [email protected] 2012-06-07 1시 45분

대화 형 PHP 쉘에서 실행의 다음 스크립트 파일의 첫 번째 줄을 무시하고 첫 번째 XML 태그 안에, 한 번에 두 개의 라인에서 모든 것을 뱉어 : tab-delimited string to XML with PHP

:

<?php 
error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', true); 
ini_set('auto_detect_line_endings', true); 
$xmlWriter = new XMLWriter(); 
$xmlWriter->openUri('/path/to/destination.xml'); 
$xmlWriter->setIndent(true); 
$xmlWriter->startDocument('1.0', 'UTF-8'); 
$xmlWriter->startElement('root'); 

$tsvFile = new SplFileObject('/path/to/destination.csv'); 
$tsvFile->setFlags(SplFileObject::READ_CSV); 
$tsvFile->setCsvControl("\t"); 
foreach ($tsvFile as $line => $row) { 
if($line > 0 && $line !== ' ') { 
    $xmlWriter->startElement('item'); 
      $xmlWriter->writeElement('name', $row[0]); 
      $xmlWriter->writeElement('email', $row[1]); 
      $xmlWriter->writeElement('date', $row[2]); 
      $xmlWriter->endElement(); 
    } 
} 

$xmlWriter->endElement(); 
$xmlWriter->endDocument(); ?> 

는이 문제를 해결하려면, 여기 해결책을 시도

<?php 
error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', true); 
ini_set('auto_detect_line_endings', true); 
$xmlWriter = new XMLWriter(); 
$xmlWriter->openUri('/path/to/destination.xml'); 
$xmlWriter->setIndent(true); 
$xmlWriter->startDocument('1.0', 'UTF-8'); 
$xmlWriter->startElement('root'); 

$tsvFile = new SplFileObject('/path/to/destination.csv'); 
$tsvFile->setFlags(SplFileObject::READ_CSV); 
$tsvFile->setCsvControl("\t"); 

$lines = explode("\n", $tsvFile); 
$tsvData = array(); 
foreach ($lines as $line) { 
    if($line > 0) { 
     $tsvData[] = str_getcsv($line, "\t"); 
     $tsvData[] = str_getcsv($line, "\t"); 
     foreach ($tsvData as $row) { 
     $xmlWriter->writeElement('name', $row[0]); 
     $xmlWriter->writeElement('email', $row[1]); 
      $xmlWriter->writeElement('date', $row[2]); 
     $xmlWriter->endElement(); 
     } 
    } 
} 

$xmlWriter->endElement(); 
$xmlWriter->endDocument();?> 

이 스크립트는 XML 파일을 생성하지만 불행히도 그 안에 어떠한 출력을 생성하지 :

다음은 수정 된 스크립트입니다.

누군가 내가 잘못 가고있는 것을 지적하여 나를 도울 수 있습니까? 나는 이것에 대해 전문가가 아니지만 배우기가 열심히 노력하고 있습니다.

귀하의 도움에 감사드립니다.

답변

1

힘든 작업을하고있는 것 같습니다.

XML은 (하루의 끝에서) 텍스트 파일로 표현할 수 있습니다.

문자열이나 파일을 만드는 것이 아닙니다.

CSV를 읽고 열을 분할하십시오. 해당 태그를 사용하여 해당 문자열에 CSV를 XML로 작성합니다. 그런 다음 해당 파일이나 문자열을 DOM 객체로로드하십시오.

1

"\t"이있는 모든 곳에서 탭 문자를 지정하고 있습니다 (TSV 파일에 대해 수정 한 항목). CSV 파일 (쉼표로 구분 된 목록)을 변환하려는 경우 첫 번째 단계로 "\t"의 모든 인스턴스를 ","으로 바꿔보십시오.

+0

감사합니다. 진전을 보이고 있습니다. 파일을 원래 형식 인 탭으로 구분 된 하나의 파일로 저장해야한다는 것을 알게되었습니다. 이제 두 번째 스크립트는 다음을 출력합니다 : Noak