0

我有一个超过 100 MB 的大型 XML 文件。我正在像这样读取文件

$fp = fopen('large.xml', 'r');

而 ($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 但它返回双值(重复)。

4

1 回答 1

0

首先在以下链接的帮助下检查您的 xml 是否有效:

http://www.xmlformatter.net/

如果您的 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";
        }
    }
}
于 2012-08-16T07:45:17.520 回答