100 MB を超える大きな XML ファイルがあります。私はこのようにファイルをチャンクで読んでいます
$fp = fopen('large.xml', 'r');
while ($data = fread($fp, 4096)) {
XMLのフォーマットはこんな感じ
<PersonalInfo>
<UserDetail>
<FirstName>ABC</FirstName>
<Occupation>Student</Occupation>
<DateOfBirth>08/14/1999</DateOfBirth>
</UserDetail>
<CaseDetail>....</CaseDetail>
<TransactionDetail>....</TransactionDetail>
</PersonalInfo>
<PersonalInfo>
<UserDetail>
<FirstName>XYZ</FirstName>
<Occupation>Student</Occupation>
<DateOfBirth>04/25/1991</DateOfBirth>
</UserDetail>
<CaseDetail>....</CaseDetail>
<TransactionDetail>.....</TransactionDetail>
</PersonalInfo>
<PersonalInfo>
<UserDetail>
<FirstName>DEF</FirstName>
<Occupation>Teacher</Occupation>
<DateOfBirth>05/12/1984</DateOfBirth>
</UserDetail>
<CaseDetail>....</CaseDetail>
<TransactionDetail>...</TransactionDetail>
</PersonalInfo>
Occupation TAG が「Student」のレコードだけを含めて、それらの結果を CSV ファイルに書き込みたいと考えています。
preg_match( "/\(.*?)\</PersonalInfo>/s", $data, $match ); として preg_match を試しました。タグを選択してから $match を調べますが、二重の値 (繰り返し) を返しています。