Я думаю, что эта задача не сложная, но, похоже, я не могу понять …
Вот данные, которые у меня есть:
$_SESSION["username"]
$_SESSION["id"]
Я хочу сохранить их в XML-файле с именем accounts.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 .: < элемент account> даже не создан.
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. Апис гораздо чище и мощнее. В 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();
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 ограничен и позволяет вам получать доступ только к его частям.