【问题标题】:Breaking foreach at certain string/ Reading through text file and generating XML在某些字符串处打破 foreach/ 读取文本文件并生成 XML
【发布时间】:2013-05-15 20:40:53
【问题描述】:

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

名字

学校

部门

地址

电话

电子邮件

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

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

<?php 

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

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


?>

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

【问题讨论】:

  • 你读过SimpleXMLDOMDocument吗?
  • 您在哪里需要帮助 - 解析字段和记录,或生成 XML?
  • 解析记录。我会检查这两个,但我希望我可以单独使用 PHP 和 Javascript 来完成。如果我可以让它在每条记录周围插入 我可能能够处理其余的。

标签: php xml foreach


【解决方案1】:

这里是使用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 相关的函数可能是一个不错的选择。

【讨论】:

  • 这是一个巨大的帮助,谢谢。我会花一些时间来剖析它,但它让我朝着正确的方向前进。
  • 所以现在我的问题是 PHP 返回一个错误,指出 explode() 中的第二个参数必须是一个字符串。假设使用 file() 是我出错的地方,我将其改为 $textline = file_get_contents("asrlist.txt") 。现在当我回显explode('&&^', $textline);时,它只返回“Array”。
  • @AustinSlominski:通过 var_dump($textline) 检查 $textline 是否真的包含您认为的内容。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果&amp;&amp; 用作该文件中记录的分隔符,您可以先将其替换为&lt;/member&gt;&lt;member&gt;。在整个文件前加上&lt;member&gt; 并在最后附加&lt;/member&gt;。您将拥有类似 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>";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多