2010-09-02 2 views
3

У меня есть файл 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

+0

Это похоже на ваш предыдущий вопрос: [Редактирование xml-файла] (http://stackoverflow.com/questions/3623993/editing-xml-file). Вы должны отредактировать и обновить исходный вопрос вместо создания нового. –

ответ

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()); 

Пример XML-файл с несколькими <events> тегами:

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

+0

Вы приветствуете:) – aularon

+0

Как я могу добавить атрибут к тегу события – Warrior