在特定字符串处break foreach /读取文本文件并生成XML



我不知道这是否是正确的方法,但是现在我正在处理一个非常大的成员详细信息文本文件。虽然确实不一致,但通常遵循以下格式:

名字

学校

部门

地址手机

邮件

&&^(表示单个记录的结束)

我想对该信息做的是通读它,然后将其格式化为XML。现在我有一个foreach像这样读取长文件:

<?php 
$textline = file("asrlist.txt");
foreach($textline as $showline){
echo $showline . "<br>";
}

?>

这就是我不知道如何继续的地方。谁能给我点提示,如何将这些记录组织成XML?

这里有一个使用simplexml的直接解决方案:

$members = explode('&&^', $textline); // building array $members
$xml = new SimpleXMLElement("<?xml version="1.0" encoding="UTF-8"?><members></members>");
$fieldnames = array('name','school','department','address','phone','email');
// set $fieldsep to character(s) that seperate fields from each other in your textfile
$fieldsep = 'pn'; // a wild guess...
foreach ($members as $member) {
    $m = explode($fieldsep, $member); // build array $m; $m[0] would contain "name" etc.
    $xmlmember = $xml->addChild('member');        
    foreach ($m as $key => $data)
        $xmlmember->addChild($fieldnames[$key],$data);
} // foreach $members
$xml->asXML('mymembers.xml');

对于读取和解析文本文件,与csv相关的函数可能是一个很好的替代方案,正如其他用户所提到的。

读取大文件可以使用fgetcsv

如果&&作为该文件中记录的分隔符,您可以开始用</member><member>替换它。在整个文件前加上<member>,并在末尾加上</member>。您将得到一些类似XML的东西。

如何替换?
您可能会发现像sed这样的unix工具很有用。

sed 's/&&/</member><member>/' <input.txt >output.xml

也可以用PHP完成,使用str_replace():

foreach($textline as $showline){
     echo str_replace( '&&', '</member><member>', $showline ) . "<br>";
}

最新更新