0

我不知道这是否是正确的做法,但现在我正在处理一个包含会员详细信息的非常大的文本文件。虽然它确实不一致,但通常符合这种格式:

姓名

学校

部门

地址

电话

电子邮件

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

我想用这些信息做的是通过它读取,然后将其格式化为 XML。所以现在我可以foreach像这样阅读长文件:

<?php 

$textline = file("asrlist.txt");

foreach($textline as $showline){
echo $showline . "<br>";
}


?>

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

4

3 回答 3

2

这是一个简单的解决方案,使用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 = '\p\n'; // 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 相关的函数可能是一个不错的选择。

于 2013-05-15T23:10:44.593 回答
1

要读取大文件,您可以使用fgetcsv

于 2013-05-15T21:08:13.613 回答
1

如果&&用作该文件中记录的分隔符,则可以先将其替换为</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>";
}
于 2013-05-15T22:14:01.570 回答