如何使用PHP5将子项添加到XML文件中的最后一个节点?

时间:2011-02-08 03:42:00

标签: php xml dom simplexml

这就是我想要做的事情

我目前有:

<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>

我尝试了simpleXML的xpath并注册了路径名,我在这个网站上找到了一些例子但没有成功 我更喜欢使用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 个答案:

答案 0 :(得分:1)

您可以使用SimpleXMLElement::count()

轻松跳转到元素的最后一个子元素

例如

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