2010-09-02 157 views
3

我有一个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

+0

这似乎和你以前的问题一样:[编辑xml文件](http://stackoverflow.com/questions/3623993/editing-xml-file)。您应该编辑并更新原始问题,而不是创建一个新问题。 – 2010-09-02 07:02:08

回答

1

你要查询的希望<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将匹配所需的节点,我们将在后面使用和添加事件的子节点。

+0

谢谢aularon。它工作正常 – Warrior 2010-09-02 07:11:26

+0

欢迎您:) – aularon 2010-09-02 07:13:05

+0

如何我可以添加一个属性到事件标记 – Warrior 2010-09-02 07:45:34