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);