【问题标题】:add multiple children to one XML element with PHP使用 PHP 将多个子元素添加到一个 XML 元素
【发布时间】:2016-11-25 23:44:52
【问题描述】:

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

这是我拥有的数据:

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

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

       <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 保存到文件中,而不是$new

标签: php xml elements children


【解决方案1】:
        $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());

已解决

【讨论】:

    【解决方案2】:

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

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

    另外你可以使用节点的属性和方法来改变它。

    $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();
    

    XMLWriter:

    $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 是有限的,只允许您访问其中的一部分。

    【讨论】:

    • 非常感谢先生,我会牢记这一点,并在我回到那个时候立即实施!
    猜你喜欢
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2020-11-03
    • 2016-02-29
    • 2013-07-19
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    相关资源
    最近更新 更多