编写和附加到XML文件

时间:2016-06-24 13:13:27

标签: php xml laravel

您好我在网上找到了以下代码,用于创建数据并将数据添加到xml文件中:

public function index()
    {
        $html = "";

        try {
            $employees = array();
            $employees [] = array(
                'name' => 'Albert',
                'age' => '34',
                'salary' => "$10000"
            );
            $employees [] = array(
                'name' => 'Claud',
                'age' => '20',
                'salary' => "$2000"
            );

            $doc = new DOMDocument();
            $doc->formatOutput = true;

            $r = $doc->documentElement->firstChild;
            $doc->appendChild( $r );

            foreach( $employees as $employee )
            {
                $b = $doc->createElement( "employee" );

                $name = $doc->createElement( "name" );
                $name->appendChild(
                    $doc->createTextNode( $employee['name'] )
                );
                $b->appendChild( $name );

                $age = $doc->createElement( "age" );
                $age->appendChild(
                    $doc->createTextNode( $employee['age'] )
                );
                $b->appendChild( $age );

                $salary = $doc->createElement( "salary" );
                $salary->appendChild(
                    $doc->createTextNode( $employee['salary'] )
                );
                $b->appendChild( $salary );

                $r->appendChild( $b );
            }

            $doc->save(".." . DIRECTORY_SEPARATOR . "storage" . DIRECTORY_SEPARATOR . "logs" . DIRECTORY_SEPARATOR . "employees.xml") ;


            return response()->json();
        }
        catch (\Exception $e)
        {
            return response()->json(
                [
                    "message" => $e->getMessage(),
                    "status_code" => $e->getCode(),
                    "data" => []
                ]);
        }

    }

这是输出:

<?xml version="1.0"?>
<employees>
  <employee>
    <name>Albert</name>
    <age>34</age>
    <salary>$10000</salary>
  </employee>
  <employee>
    <name>Claud</name>
    <age>20</age>
    <salary>$2000</salary>
  </employee>
</employees>

然而,当我再次运行代码时,它会提供相同的输出。我希望将新输出附加到xml文件中的先前数据,以便我改为:

    <?xml version="1.0"?>
    <employees>
      <employee>
        <name>Albert</name>
        <age>34</age>
        <salary>$10000</salary>
      </employee>
      <employee>
        <name>Claud</name>
        <age>20</age>
        <salary>$2000</salary>
      </employee>
      <employee>
        <name>Albert</name>
        <age>34</age>
        <salary>$10000</salary>
      </employee>
      <employee>
    <name>Claud</name>
    <age>20</age>
    <salary>$2000</salary>
  </employee>
</employees>

1 个答案:

答案 0 :(得分:1)

问题是脚本总是写入同一个文件 - 因此它会覆盖旧文件。

解决方案1:

最简单的方法是在文件名后加一个时间戳,如下所示:

$doc->save(".." . DIRECTORY_SEPARATOR . "storage" . DIRECTORY_SEPARATOR . "logs" . DIRECTORY_SEPARATOR . "employees-".date("Y/m/d - h:m:s").".xml") ;

对于每次运行的脚本,您都会获得一个包含新内容的单独文件。

解决方案2:

要将新数据附加到旧数据,您需要先加载旧文件,然后将其与新内容一起附加。 DOMDocument没有任何方法或功能可以自动将新内容添加到旧内容中。

所以做完之后

$doc = new DOMDocument();

您可以使用

load现有文件
$oldContent = $doc->load(<PATH TO YOUR XML FILE>);

现在您可以合并两者并保存它们。如何合并这两个文件已经详细解释了here