【发布时间】:2012-08-16 04:48:37
【问题描述】:
我有一个超过 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("/\(.*?)\/s", $data, $match); 选择标签,然后查看 $match 但它返回双值(重复)。
【问题讨论】:
-
尝试使用 PHP XML 解析器:php.net/manual/en/book.xml.php 非常适合这个问题。
标签: php xml regex xml-parsing