打破某些字符串的foreach /通过文本文件读取并生成XML

时间:2013-05-15 20:40:53

标签: php xml foreach

我不知道这是否是正确的方法,但现在我正在处理一个非常大的会员资料文本文件。但它确实不一致,但通常符合这种格式:

名称

学校

地址

电话

电子邮件

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

通过它读取我想要处理的信息,然后将其格式化为XML。 所以现在我通过长文件读取foreach,如下所示:

<?php 

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

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


?>

这就是我不知道如何继续的地方。任何人都可以给我一些关于如何将这些记录组织成XML的提示吗?

3 个答案:

答案 0 :(得分: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相关功能可能是一个不错的选择。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果&&作为该文件中记录的分隔符,则可以先将其替换为</member><member>。使用<member>添加整个文件,并在结尾添加</member>。你将拥有类似XML的东西。

如何更换?
您可能会发现sed等unix工具很有用。

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

您也可以使用str_replace()

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