大型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); 选择标签,然后查看$匹配,但它返回双值(重复)。

+0

尝试使用PHP的XML解析器:HTTP ://www.php.net/manual/en/book.xml.php 非常适合这个问题。 – 2012-08-16 05:19:27

首先检查,如果你的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"; 
     } 
    } 
}