我有一个超过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>
我想只包含占用标记为“学生”的记录,并将这些结果写入CSV文件。
我已经尝试过preg_match preg_match(“/\(.*?)\</PersonalInfo>/s”,$ data,$ match); 选择标签,然后查看$ match但它返回双值(重复)。
答案 0 :(得分:0)
首先通过以下链接检查您的xml是否有效:
如果您的xml有效,请执行以下操作:
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
@$dom->load('large.xml');
$tags = $dom->getElementsByTagName('PersonalInfo');
foreach ($tags as $destination) {
foreach($destination->childNodes as $child) {
if ($child->textContent == "Student") {
echo "Write code to create csv file";
}
}
}