使用 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 个部分:
- 使用
DOMDocument
方法创建节点,例如 createElement()
、createTextNode()
。
- 使用
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();
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 是有限的,只允许您访问其中的一部分。
我觉得这个任务不难,但我好像想不通...
这是我的数据:
$_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.:
你能帮我把事情弄好吗?
注意:重要的是,当 运行 另一个注册时,此代码再次运行,无需删除或覆盖任何内容,只需添加另一个结构,如上所示
提前致谢!
$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 个部分:
- 使用
DOMDocument
方法创建节点,例如createElement()
、createTextNode()
。 - 使用
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();
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 是有限的,只允许您访问其中的一部分。