【问题标题】:PHP and file manipulationPHP 和文件操作
【发布时间】:2009-10-27 22:52:24
【问题描述】:

我想知道是否可以将 xml 文件作为纯文本文件打开,以便我可以读取每一行并操作文本?

【问题讨论】:

  • 为什么要这样做?你是在自找麻烦。 xml 的所有冗长,没有任何语义好处。
  • 我同意其他人的观点,即您应该使用 XML 解析器或 DOMDocument,但如果您想知道答案是否定的。 XML 只是一个文本文件。您可以使用filefile_get_contentsfread 或您用来读取文本文件的任何方式来阅读它。

标签: php string file-io


【解决方案1】:
$xml_file = '/var/www/file.xml';
$contents = file_get_contents($xml_file); // Dumps the entire file into a single string
$contents = file($xml_file); // Dumps each line into an array

但是,我建议使用simplexml_load_file()(即使您说过要避免使用它),因为无法保证 xml 的格式。它可能都在一行上,也可能在意想不到的地方用换行符格式化。

【讨论】:

  • 我想使用 simplexml_load_file() 但我不知道如何使用它。我最大的问题是从单个节点中提取数据。我永远无法判断一个对象何时是一个对象数组,或者它是一个对象还是对象中的一个值,所以我想我现在会坚持上面的例子,稍后再扩展。感谢您的帮助。
  • is_array() , is_object() , is_string()
【解决方案2】:

为什么不直接使用任何 XML 解析器/操纵器?

您可以在 http://www.php.net/manual/en/refs.xml.php 找到这些参考资料

如果你有一个格式很好的 XML 文件,那么,

$file = 'file.xml';

// get contents and normalize the newline
$xml_arr = file($file);
foreach($xml_arr as &$line){
  // do your manipulation to $line
}

$ctns = implode("\n",$xml_arr);
file_put_contents($file,$ctns); // write back

【讨论】:

  • 如果可以通过file函数将文件读取为行数组,为什么要通过\r\n拆分文件上下文?
  • @Ivan - 我的错。用于 file_get_contents。
【解决方案3】:

要将文件作为字符串数组读取,请使用file 函数:

$lines = file('your_xml_file.xml');
foreach($lines as $line) { 
    ## do the stuff for each line
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多