php - 在xml文件中添加子节点

标签 php xml

我有一个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<xml>
<settings>
<title>Calendar2</title>
<subTitle>Calendar2</subTitle>
</settings>
<events date="02-09-2010">
<event>
<title>HTML Tags</title>
<description>HTML Tags</description>
</event>
</events>
</xml>

我如何根据日期在事件标签内添加另一个事件

<?xml version="1.0" encoding="UTF-8"?>
    <xml>
    <settings>
    <title>Calendar2</title>
    <subTitle>Calendar2</subTitle>
    </settings>
    <events date="02-09-2010">
    <event>
    <title>HTML Tags</title>
    <description>HTML Tags</description>
    </event>
    <event>
    <title>Another Title</title>
    <description>Another description</description>
    </event>
    </events>
    </xml>

我用过这段代码

$xml_str = file_get_contents($xmlfile);
$xml = new SimpleXMLElement($xml_str);
$event = $xml->events->addChild('event');
$event->addChild('title', 'More Parser Stories');
$event->addChild('description', 'This is all about the people who make it work.');
file_put_contents($xmlfile, $xml->asXML());

但它会添加到第一个节点。我如何添加到日期为 02-09-2010 的事件标签

最佳答案

您必须查询想要的 <events>使用 $xml->events 标记而不是使用第一个标记(xpath 会简单地返回)在这里查询 xml 文档很有帮助:

PHP 脚本:

<?php
$xml_str = file_get_contents('xmlfile');
$xml = new SimpleXMLElement($xml_str);
$wantedEventsTag = $xml->xpath('/xml/events[@date="02-09-2010"]');
$wantedEventsTag = $wantedEventsTag [0];//since above fun will return an array
$wantedEventsTag['attrname']='attrval';//Here's how to add an attribute
$event = $wantedEventsTag->addChild('event');
$event->addChild('title', 'More Parser Stories');
$event->addChild('description', 'This is all about the people who make it work.');
file_put_contents('xmlfile.xml', $xml->asXML());

包含多个 <events> 的示例 XML 文件标签:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
  <settings>
    <title>Calendar2</title>
    <subTitle>Calendar2</subTitle>
  </settings>
  <events date="01-01-1999">
  </events>
  <events>
  </events>
  <events date="02-09-2010">
    <event>
      <title>HTML Tags</title>
      <description>HTML Tags</description>
    </event>
    <event>
      <title>Another Title</title>
      <description>Another description</description>
    </event>
  </events>
</xml>

脚本xpath将匹配所需的节点,我们稍后将使用该节点并将事件子节点添加到。

关于php - 在xml文件中添加子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3624266/

相关文章:

javascript - 从另一个(页面)刷新页面

php - 处理 gem 数据

php - 使用递归函数构建多维数组

php - Wordpress-按自定义字段获取帖子

php - 尝试从 MYSQL 获取数据到 XML 时出错

jquery - IE7 和 jquery ajax XML : permission denied on local xml file

java - 是否可以看到仅由 java 制作的布局的预览?

php - 在远程服务器上执行 PHP 脚本文件,而不在远程服务器上复制它

java - 无法从 Jax-ws Web 服务返回列表的 ArrayList

c - Perl 将数据传递给 stdin 并从 stdout 和 stderr 读取