Как добавить дочерний элемент в последний узел в файле XML с помощью PHP5? - PullRequest
1 голос
/ 08 февраля 2011

вот что я пытаюсь сделать

В настоящее время у меня есть:

<sessions>
  <session>
    <event>milk</event>
  </session>
  <session>
    <event>graze</event>
  </session>
</sessions>

я хочу перейти к самому последнему узлу "сеанса" и добавить новое событие

<event>health treatment</event>

так бы это выглядело:

<sessions>
  <session>
    <event>milk</event>
  </session>
  <session>
    <event>graze</event>
    <event>health treatment</event>
  </session>
</sessions>

я попробовал xxath simpleXML и зарегистрировал путь, я нашел несколько примеров на этом сайте, но безуспешно я бы предпочел использовать simpleXML, но если dom - единственное решение, то я воспользуюсь им, мне также не удалось сделать это в dom

вот мой сценарий (я прокомментировал некоторые моменты, когда я экспериментировал):

<?php
$session = $_POST['session'];
$event = $_POST['event'];

$xml = simplexml_load_file("sessions.xml"); 
//$xml->registerXPathNamespace('o', 'http://obix.org/ns/schema/1.0');

$sxe = new SimpleXMLElement($xml->asXML());

if(isset($session)){
$item = $sxe->addChild("session");
}else{
list($item) = $xml->xpath('/sessions/session[last()]');
$item->name = 'Jane Smith';
//$item = $sxe->children('session[last()]');
//$xpath = '/o:sessions/o:session[last()]';
//$item = $xml->xpath($xpath);
}
$item->addChild("event", $event);
$sxe->asXML("sessions.xml"); 
?>

или, если вы знаете лучший способ сделать это, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 08 февраля 2011

Вы можете легко перейти к последнему дочернему элементу, используя SimpleXMLElement :: count ()

Например

$lastSession = $xml->session[$xml->session->count() - 1];
$lastSession->addChild('event', $event)
...