Как обновить XML-файл через веб-форму с помощью PHP: проблема с именем формы - PullRequest
0 голосов
/ 22 мая 2011

Я провел некоторый поиск по этому, но не могу найти какой-либо простой способ или другие примеры по этому вопросу (я новичок в PHP, XML на пару месяцев назад, так что терпите меня :)).

  • У меня есть файл XML, заполненный полезными данными
  • Мне нужно иметь возможность загрузить весь XML-файл в форму, каждый дочерний узел загружается в свое собственное поле формы
  • Я хочу изменить различные поля
  • и затем сохраните все обратно в тот же XML-файл, используя PHP для анализа данных

ПРОБЛЕМА: как пометить «имена» в полях формы, чтобы я знал, как заполнить соответствующие дочерние узлы. XML-файл выглядит так:

<band id="1">
 <group>Guns N Roses</group>
 <member>Duff</member>
</band>
<band id="2">
 <group>Iron Maiden</group>
 <member>Paul</member>
</band>

Чтобы обновить это через веб-форму, я подумал, что лучше всего иметь атрибут name в поле INPUT, совпадающий с именем дочернего узла .... но тогда у меня будет 2 x группы и 2 члена.

Должен ли я каким-либо образом добавить атрибут в конец имени так, чтобы

<input name=group.1 value=$group.1>
<input name=group.1 value=$group.2>  

(где $ group.1 и $ group.2 можно найти с помощью PHP DOM)

и затем у меня есть уникальная пара имя / значение в массиве php $ _POST, которую можно использовать для обновления файла XML через DOM.

Все это кажется очень хакерским и неуклюжим, и мне интересно, есть ли более изящный способ сделать все это. Снова, очень плохо знакомый с этим ... возможно уже есть некоторый очевидный способ сделать это, которого я полностью пропускаю.

Спасибо за любую помощь, ребята

г. B

1 Ответ

0 голосов
/ 22 мая 2011

Прежде всего, ваш "XML" не является допустимым XML. Он должен иметь корневой элемент, который оборачивает весь контент. Прямо сейчас у вас нет этого корневого элемента, потому что на верхнем уровне у вас есть более одного элемента (......).

Так что исправьте это, обернув всю строку в один другой элемент:

$xml = "<root>$xml</root>";

Затем загрузите его в элемент DOMDocument, просмотрите и обведите его с помощью DOMXPath или в объекте simpleXML (который, вероятно, быстрее кодируется, но не уверен в производительности).

edit: как назвать элементы формы для простого обновления:

<input name="band[1][group]" value="$group1">
<input name="band[1][member]" value="$member1" />

<input name="band[2][group]" value="$group1">
<input name="band[2][member]" value="$member1" />

После того как вы отправите форму по почте, вы можете просмотреть все входные данные, выполнив массив foreach over $_POST['band']:

if (count($_POST) > 0)
{
    if (is_array($_POST['band'])
    {
        foreach ($_POST['band'] as $id => $band)
        {
            echo "Band $id has group ".$band['group']." and member ".$band['member']."<br />\n";
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...