PHP XML DOM Добавить, изменить и обновить - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть XML файл с именем «apps. xml» и структурированный так:

<?xml version="1.0" encoding="utf-8"?>

<applications>
    <app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
    <app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>

, и я sh могу добавить, изменить и обновить (сохранить изменения в файл) вышеупомянутый файл XML с использованием сценария PHP ($ _GET), DOM и Xpath, запущенного на моем веб-сайте.

после добавления новой записи XML (последняя строка), файл вывод будет выглядеть так:

<?xml version="1.0" encoding="utf-8"?>

<applications>
    <app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
    <app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
    <app id="d65k274p" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>

и после Модификации / Обновления (первая запись изменена / обновлена) будет выглядеть так:

<?xml version="1.0" encoding="utf-8"?>

<applications>
    <app id="b461ae4a" valid="1" company="Orange Inc." appname="None" user="tommy" description="Test" note="None" />
    <app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
    <app id="d65k274p" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>

и добавить еще пример того, что я пытаясь достичь:

http://www.myadress.com/apps.php?append=1&id=d65k274p&valid=1&company=Orange%20Inc&appname=None&user=admin&description=Test&note=None

// Append argument would decide to add a whole new entry set to 1 or if it is on 0 then to be modified the whole entry by given "id".

$xappend = $_GET["append"];

$xid = $_GET["id"];
$xvalid = $_GET["valid"];
$xcompany = $_GET["company"];
$xappname = $_GET["appname"];
$xuser = $_GET["user"];
$xdescription = $_GET["description"];
$xnote = $_GET["note"];

if (file_exists('apps.xml')) {
    $xorig = simplexml_load_file('apps.xml');
} else {
    exit('Failed to open apps.xml !');
}

Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

После долгих часов мне удалось сделать это как новичок:

$xmlFile = 'apps.xml';

$xorig = simplexml_load_file($xmlFile) or die('0');

    $app = $xorig->addChild('app');
    $app->addAttribute('id', $xid);
    $app->addAttribute('valid', $xval);
    $app->addAttribute('company', $xcmp);
    $app->addAttribute('appname', $xanam);
    $app->addAttribute('user', $xusr);
    $app->addAttribute('description', $xdesc);
    $app->addAttribute('note', $xnote);
0 голосов
/ 15 апреля 2020

Попробуйте и посмотрите, работает ли оно на вашем фактическом xml:

<?php
$original = <<<SNIPPET
<applications>
    <app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
    <app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
SNIPPET;

$xorig = simplexml_load_string($original);

$ins_pnt = $xorig->xpath('/applications');
$target = $xorig->xpath('/applications/app[1]');
$new_node = clone $target[0];
$new_node['id'] = "d65k274p";

// the function is lifted from https://stackoverflow.com/a/4778964/9448090
function node_append(SimpleXMLElement $to, SimpleXMLElement $from) {
    $toDom = dom_import_simplexml($to);
    $fromDom = dom_import_simplexml($from);
    $toDom->appendChild($toDom->ownerDocument->importNode($fromDom, true));
}

node_append($ins_pnt[0], $new_node); 

echo $xorig->asXML();

Вывод:

<?xml version="1.0" encoding="UTF-8"?>
<applications>
   <app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
   <app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
   <app id="d65k274p" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...