Тема: Проблеми зі створенням XML
Існує функція яка викликається декілька разів і якій передаються два параметри. Функція, використовуючи ці параметри, має сформувати XML файл. Проблема полягає в тому як приєднати дані до DOM так щоб вони не дублювалися і коли дані для функції закінчаться записати XML в файл. Ось код:
$pubsFile = new DOMDocument("1.0", "UTF-8"); // об_єкт оголошено саме тут (і функція використовують 
// його як глобальний) для того щоб не створювати його наново при кожному виклику функції
$pubsFile->formatOutput = true;
$tmpPubsFile = '';
function parseRSS($rss) {
    global $pubsFile, $tmpPubsFile;
    foreach ($rss->channel->item as $e) {
        if ( stripos((string)$e->title[0], 'новые') !== false ) {
            writeRssData($e->pubDate, $e->description);
        }
    }
    $pubsFile = new DOMDocument();
    $pubsFile->loadXML($tmpPubsFile);
    $pubsFile->save(PUBS_FILE_NAME);
}
function writeRssData($pubDate, $description){
    global $pubsFile, $data, $pubsFileYears, $tmpPubsFile;
    $day = date('d', strtotime($pubDate));
    $month = date('F', strtotime($pubDate));
    $year = date('Y', strtotime($pubDate));
    if (isset($pubsFile->data)) {
        # open & read
        echo 'file';
    } else {
        if ($pubsFile->getElementById($pubDate) === NULL) {
            $data = $pubsFile->getElementsByTagName('data')->item(0);
            if (!$data) { // всі ці if'и потрібні для того щоб, якщо елемент існує, то не створювати його заново
                $data = $pubsFile->createElement("data");
                
            }
            $pubsFile->appendChild($data);
            $pubsFileYears = $pubsFile->getElementsByTagName('years')->item(0);
            if (!$pubsFileYears){
                $pubsFileYears = $pubsFile->createElement('years');
                $pubsFileYearsId = $pubsFile->createAttribute('id');
                $pubsFileYearsId->value = 'years';
                $pubsFileYears->value = $pubsFileYearsId;
                
            }
            $data->appendChild($pubsFileYears);
            $pubsFileYear = $pubsFile->getElementById($year);
            if (!$pubsFileYear) {
                $pubsFileYear = $pubsFile->createElement('year');
                $pubsFileYearId = $pubsFile->createAttribute('id');
                $pubsFileYearId->value = $year;
                $pubsFileYear->appendChild($pubsFileYearId);
            }
            $pubsFileYears->appendChild($pubsFileYear);
            $pubsFileMonth = $pubsFile->getElementById(date('m', strtotime($pubDate)).'.'.$year);
            if ($pubsFileMonth === NULL) {
                $pubsFileMonth = $pubsFile->createElement('month');
                $pubsFileMonthId = $pubsFile->createAttribute('id');
                $pubsFileMonthId->value = date('m', strtotime($pubDate)).'.'.$year;
                $pubsFileMonth->appendChild($pubsFileMonthId);
                
            }
            $pubsFileYear->appendChild($pubsFileMonth);
            $pubsFileDay = $pubsFile->createElement('day');
            $pubsFileDayId = $pubsFile->createAttribute('id');
            $pubsFileDayId->value = $day.'.'.date('m', strtotime($pubDate)).'.'.$year;
            $pubsFileDay->appendChild($pubsFileDayId);
            $pubsFileDescription = $pubsFile->createTextNode($description);
            $pubsFileDay->appendChild($pubsFileDescription);
            $pubsFileMonth->appendChild($pubsFileDay);
            $data->appendChild($pubsFileYears);
            $tmpPubsFile = $data->ownerDocument->saveXML(); // змінна $tmpPubsFile тут типу для накопичення
// даних щоб їх потім можна було записати. Вона глобальна і отже, не створюється кожного разу коли 
// викликається функція. Але, як видно нічого не накопичується.
// тут у мене була ідея тупо кожного разу перезаписувати глобальну змінну новим XML об_єктом,
// але вилазить помилка Uncaught exception 'DOMException' with message 'Wrong Document Error.
// При спробі імпортувати DOM щось їще вилазить. Зараз не можу перевірити.
            /*$pubsFile = new DOMDocument("1.0", "UTF-8");
            $tmpPubsFile = $pubsFile->importNode($data, TRUE);
            $pubsFile->appendChild($tmpPubsFile);*/
            #$pubsFile->loadXML($tmpPubsFile);Мав би, в результаті роботи програми, виникнути отака структура:
<data>
    <years>
        <year id="2013">
            <month id="10.2013">
                <day id="23.10.2013">Text here</day>
                <day id="22.10.2013">Text here</day>
            </month>
            <month id="10.2013">
                <day id="23.10.2013">Text here</day>
                <day id="22.10.2013">Text here</day>
            </month>
        </year>
    </years>
</data>але виходить отаке:
<data>
    <years>
        <year id="2013">
            <month id="10.2013">
                <day id="23.10.2013">Text here</day>
            </month>
        </year>
        <year id="2013">
               <month id="10.2013">
                   <day id="22.10.2013">Text here</day>
                </month>
         </year>
    </years>
</data>