2017-10-02 19 views
0

중첩되어있는 큰 xml 파일을 처리 중이며 큰 파일로 인해 XML 판독기를 사용하기로 결정했습니다. 내가 추출하려고하는 것은 부모 노드 (N8 : Entity)의 속성 "PartyID"와 "OrganisationName"및 "CompanyID"의 텍스트 값을 추출한 다음 csv로 내 보냅니다. 내 XML 파일에서 php를 사용하여 상위 노드의 속성 값을 자식 노드의 해당 텍스트 값과 함께 추출합니다.

,이 정보에 대한 경로는 다음과 같습니다 OrganisationName = N8 : EntityList/N8 : 법인/N2 : OrganisationName/N2 : NameElement 회사 ID = N8 : EntityList/N8 : 법인/N5 : 식별자/N5 : 식별자/N5 : 식별자 요소.

나는 OrganisationName CompanyID PartyID라는 컬럼 헤더가있는 테이블을 갖고 자한다. 내 코드에서는 OrganisationName 및 CompanyID를 추출 할 수 있지만 PartyID 열은 비어 있습니다.

나는 어디에 문제가 있는지 알기 위해 stackoverflow를 빗어 봤지만 해결책을 찾지 못했습니다. 나는 기꺼이 도움을 얻을 것이다.

아래 코드는 제 코드입니다.

<?php error_reporting (E_ALL); 
ini_set ('display_errors', 1); 
ini_set("max_execution_time", 0); 

$reader = new XMLReader(); 
$reader->open("[MY XML FILE][1]"); 
$fo = fopen("companiesnzbn0.csv", "w"); 
fputs($fo, "name, id, NZBN".PHP_EOL); 
while ($reader->read()) { 
if ($reader->name == 'N8:Entity' && 
     $reader->nodeType === XMLReader::ELEMENT) { 
      $name = null; 
      $id = null; 
      $attrsPartyID = null; 
      $newNode = $reader->expand(); 

      $nameNode = $newNode->getElementsByTagName('OrganisationName'); 
      if ($nameNode->length > 0){ 
       $name = $nameNode[0]->getElementsByTagName('NameElement')- 
>item(0)->nodeValue; 
      } 

      $nzbNode = $newNode- 
>getElementsByTagName('UltimateHoldingCompany'); 

      foreach ($reader as $element) { 
       $attrsPartyID = $element->getAttribute('PartyID'); 
      } 

      $idNode = $newNode->getElementsByTagName('IdentifierElement'); 
      if ($idNode->length > 0){ 
       $id = $idNode[0]->nodeValue; 
      } 

      $newName = str_ireplace(","," ",$name); 

      fputs($fo, $newName.",".$id.",".$attrsPartyID.PHP_EOL); 

     } 
} 
fclose($fo); 

답변

0
<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 
ini_set("max_execution_time", 0); 

$reader = new XMLReader(); 

$reader->open("my.xml"); 
$fo = fopen("my.csv", "w"); 
fputs($fo, "name, id, NZBN".PHP_EOL); 
while ($reader->read()) { 


if ($reader->name == 'N8:Entity' && 
     $reader->nodeType === XMLReader::ELEMENT && $reader->localName == 
'Entity') { 
      $name = null; 
      $id = null; 
      $attrsPartyID = null; 
      $newNode = $reader->expand(); 

      $nameNode = $newNode->getElementsByTagName('OrganisationName'); 
      if ($nameNode->length > 0){ 
       $name = $nameNode[0]->getElementsByTagName('NameElement')- 
    >item(0)->nodeValue; 
      } 


      $attrsPartyID = (string)$reader->getAttribute('PartyID'); 


      $idNode = $newNode->getElementsByTagName('IdentifierElement'); 
      if ($idNode->length > 0){ 
       $id = $idNode[0]->nodeValue; 
      } 

      $newName = str_ireplace(","," ",$name); 

      fputs($fo, $newName.",".$id.",".$attrsPartyID.PHP_EOL); 

     } 
} 
fclose($fo);