使用 PHP 将多个子项添加到一个 XML 元素

add multiple children to one XML element with PHP

我觉得这个任务不难,但我好像想不通...

这是我的数据:

        $_SESSION["username"]
        $_SESSION["id"]

我想在注册时将这些存储在名为 accounts.xml 的 XML 文件中。这个问题不是关于整个过程,我只是想知道如何正确存储。在这个过程之后,我想在我的 XML-file:

中包含这些新结构
       <account>
           <username>  value of $_SESSION["username"]  </username>
           <user_id>  value of $_SESSION["id"]  </user_id>
       </account>

这是我目前使用的代码:

        $xml = simplexml_load_file('accounts.xml');

        $new = new SimpleXMLElement("<account></account>");
        $new->addChild('username', '$_SESSION["username"]');
        $new->addChild('user_id', '$_SESSION["id"]');

        file_put_contents('accounts.xml', $xml->asXML());

我尝试了一些变化,但通常我会得到这样的结果:

       <username>  $_SESSION["username"]
          <user_id>  $_SESSION["id"]  </user_id>
       </username>

如你所见,我有多个问题:

1.: 元素甚至都没有创建。 2.: user_id 在用户名里面——我不想要那个 和 3.: 变量本身存储到文件中,而不是它们的值...

你能帮我把事情弄好吗?

注意:重要的是,当 运行 另一个注册时,此代码再次运行,无需删除或覆盖任何内容,只需添加另一个结构,如上所示

提前致谢!

        $xml = simplexml_load_file('accounts.xml');


        $account = $xml->addChild('account');
        $account->addChild('username', $_SESSION["username"]);
        $account->addChild('user_id', $_SESSION["id"]);


        file_put_contents('accounts.xml', $xml->asXML());

已解决

我强烈建议使用 DOM 或 XMLWriter 来创建 XML。 Apis 更干净、更强大。在 DOM 中,它有 2 个部分:

  1. 使用 DOMDocument 方法创建节点,例如 createElement()createTextNode()
  2. 使用 appendChild()insertChild()、...
  3. 将节点添加到其父节点(文档或元素)

此外,您还可以使用节点的属性和方法对其进行更改。

$document = new DOMDocument();
$account = $document
  ->appendChild($document->createElement('account'));
$account
  ->appendChild($document->createElement('username'))
  ->appendChild($document->createTextNode('John Doe'));
$account
  ->appendChild($document->createElement('user_id'))
  ->appendChild($document->createTextNode(42));
$document->formatOutput = TRUE;
echo $document->saveXml();

XML作者:

$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(true);
$writer->startDocument('1.0', 'utf-8');
  $writer->startElement('account');
    $writer->writeElement('username', 'John Doe');
    $writer->writeElement('user-id', 42);
  $writer->endElement();
$writer->endDocument();
echo $writer->outputMemory();

您必须记住,XML 文档中的任何内容都是一个节点。元素、属性、cdata 部分等。SimpleXML 是有限的,只允许您访问其中的一部分。