我不知道这是否是正确的方法,但是现在我正在处理一个非常大的成员详细信息文本文件。虽然确实不一致,但通常遵循以下格式:
名字学校部门地址手机邮件&&^(表示单个记录的结束)
我想对该信息做的是通读它,然后将其格式化为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>";
}