大型XML文件解析PHP中的块数据扫描
问题描述:
我有一个超过100 MB的大型XML文件。我正在读取这样的文件块大型XML文件解析PHP中的块数据扫描
$ fp = fopen('large.xml','r');
而($数据= 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>
我想只包括那些记录职业TAG是“学生”并将这些结果写入CSV文件。
我已经尝试preg_match为 preg_match(“/ \(。*?)\ </PersonalInfo>/s”,$ data,$ match); 选择标签,然后查看$匹配,但它返回双值(重复)。
答
首先检查,如果你的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";
}
}
}
尝试使用PHP的XML解析器:HTTP ://www.php.net/manual/en/book.xml.php 非常适合这个问题。 – 2012-08-16 05:19:27