【问题标题】:Writing human readable data to XML file without success将人类可读数据写入 XML 文件但未成功
【发布时间】:2017-03-11 04:18:57
【问题描述】:

我已经经历了大约 3 个小时,但没有成功。有人可以指出我的脚本有什么问题吗?它写了信息,但它在一行中完成,我正在格式化它,尝试了不同的方式,但它只保留在一行中。

<?php
if (!file_exists ($fpath))
    {
        $fo = fopen($fpath, 'a') or die("Failed to create file.");
        fwrite($fo, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r<".$fname.">\r</".$fname.">") or die("Failed to format file.");
        fclose($fo);
    }

    $xml = new DOMDocument('1.0', 'utf-8');
    $xml->formatOutput = true;
    $xml->preserveWhiteSpace = false;
    $xml->load($fpath);

    $date = date("Y-m-d");
    @$email = $_POST['email'];

    $nonode = $xml->getElementsByTagName($sn);

    if ($nonode->length == 0)
    {
        $addnode = $xml->createElement($sn);
        $newnode = $addnode->appendChild($xml->createElement('data'));
        $newnode->appendChild($xml->createElement('date', $date));

        if (isset ($_POST['email']))
        {
            $newnode->appendChild($xml->createElement('email', $email));
        }

        $xml->getElementsByTagName($fname)->item(0)->appendChild($addnode);
        $xml->save($fpath);
    }
?>

【问题讨论】:

  • 如果你设置$xml-&gt;preserveWhiteSpace = true;会有什么不同吗?
  • 不,它一直在做同样的事情。谢谢@Ken H。
  • 为什么在原始字符串中用\r(回车)分隔行?不应该是\n(换行符)吗?
  • 嗯,一开始我使用/n,但后来将其更改为/r 试图解决这个问题,除非在创建文件时写入数据,否则两者都可以完成工作谢谢@Jim驻军

标签: php xml


【解决方案1】:

玩弄它,让它按要求工作。在检查 file_exists() 是否创建 XML 元素时替换 fopen()fwrite,生成的脚本如下所示:

<?php
if (!file_exists ($fpath))
    {
        $xml = new DOMDocument('1.0', 'UTF-8');
        $xml->formatOutput = true;
        $xml->preserveWhiteSpace = false;

        $rootnode = $xml->createElement($fname);
        $addnode = $rootnode->appendChild($xml->createElement($sn));
        $newnode = $addnode->appendChild($xml->createElement('data'));

        if (isset ($_POST['email']))
        {
            $newnode->appendChild($xml->createElement('email', $email));
        }

        $xml->appendChild($rootnode);
        $xml->save($fpath);
    }
?>

输出一个漂亮的:

<?xml version="1.0" encoding="UTF-8"?>
<expdb>
  <sn>
    <data>
      <email>myemail@email.com</email>
    </data>
  </sn>
</expdb>

感谢所有人,希望这可以帮助某人。您应该将此作为参考,注意 XML 标记名称和 XML 函数参数

【讨论】:

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