Мне нужно сгенерировать XML-файл с использованием PHP, имеющего следующую структуру. Этот файл представляет собой структуру викторины, в которой каждый вопрос имеет пять ответов. Тексты вопросов и ответов прилагаются в CDATA.Сгенерировать XML-файл с помощью PHP
<?xml version="1.0" encoding="UTF-8"?>
<QuizMaster>
<header version="0.36" exportVersion="1" />
<data>
<quiz>
<autostart>false</autostart>
<forms activated="false" position="0" />
<questions>
<question answerType="single">
<questionText><![CDATA[What is the city?]]></questionText>
<correctMsg />
<incorrectMsg />
<answers>
<answer points="1" correct="true">
<answerText html="false"><![CDATA[Kolkata]]></answerText>
</answer>
<answer points="1" correct="false">
<answerText html="false"><![CDATA[Delhi]]></answerText>
</answer>
<answer points="1" correct="false">
<answerText html="false"><![CDATA[Mumbai]]></answerText>
</answer>
<answer points="1" correct="false">
<answerText html="false"><![CDATA[Chennai]]></answerText>
</answer>
<answer points="1" correct="false">
<answerText html="false"><![CDATA[Goa]]></answerText>
</answer>
</answers>
</question>
</questions>
</quiz>
</data>
</QuizMaster>
Я пробовал следующий код PHP. Он начинает давать ошибку из второго ответа (// Ответ 2), где атрибутов для ответ. Ошибка подобна Предупреждение: SimpleXMLElement :: addAttribute(): Атрибут уже существует в C: \ wamp \ www \ quiz stack.php в строке 46. Я уже включил эту кодировку в несколько других мест в этом проекте, но во всех случаях у каждого вопроса был только один ответ.
<?php
class SimpleXMLExtended extends SimpleXMLElement
{
public function addCData($cdata_text)
{
$node = dom_import_simplexml($this);
$no = $node->ownerDocument;
$node->appendChild($no->createCDATASection($cdata_text));
}
}
$xmlFile = 'quiz_file.xml';
$xml = new SimpleXMLExtended('<QuizMaster/>');
// header
$xml->header = NULL;
$xml->header->addAttribute('version', '0.36');
$xml->header->addAttribute('exportVersion', '1');
$xml->data = NULL;
// quiz
$xml->data->quiz = NULL;
$xml->data->quiz->autostart = ('false');
// forms
$xml->data->quiz->forms = NULL;
$xml->data->quiz->forms->addAttribute('activated', 'false');
$xml->data->quiz->forms->addAttribute('position', '0');
// Question Start
$xml->data->quiz->questions = NULL;
// Question answer loop starts here
$xml->data->quiz->questions->question = NULL;
$xml->data->quiz->questions->question->addAttribute('answerType', 'single');
// Question text
$xml->data->quiz->questions->question->questionText = NULL;
$xml->data->quiz->questions->question->questionText->addCData('What is the city?');
$xml->data->quiz->questions->question->correctMsg = NULL;
$xml->data->quiz->questions->question->incorrectMsg = NULL;
// Answers start
$xml->data->quiz->questions->question->answers = NULL;
// Answer 1
$xml->data->quiz->questions->question->answers->answer = NULL;
$xml->data->quiz->questions->question->answers->answer->addAttribute('points', '1');
$xml->data->quiz->questions->question->answers->answer->addAttribute('correct', 'true');
$xml->data->quiz->questions->question->answers->answer->answerText = NULL;
$xml->data->quiz->questions->question->answers->answer->answerText->addAttribute('html', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText->addCData('Kolkata');
// Answer 2
$xml->data->quiz->questions->question->answers->answer = NULL;
$xml->data->quiz->questions->question->answers->answer->addAttribute('points', '1');
$xml->data->quiz->questions->question->answers->answer->addAttribute('correct', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText = NULL;
$xml->data->quiz->questions->question->answers->answer->answerText->addAttribute('html', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText->addCData('Delhi');
// Answer 3
$xml->data->quiz->questions->question->answers->answer = NULL;
$xml->data->quiz->questions->question->answers->answer->addAttribute('points', '1');
$xml->data->quiz->questions->question->answers->answer->addAttribute('correct', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText = NULL;
$xml->data->quiz->questions->question->answers->answer->answerText->addAttribute('html', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText->addCData('Mumbai');
// Answer 4
$xml->data->quiz->questions->question->answers->answer = NULL;
$xml->data->quiz->questions->question->answers->answer->addAttribute('points', '1');
$xml->data->quiz->questions->question->answers->answer->addAttribute('correct', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText = NULL;
$xml->data->quiz->questions->question->answers->answer->answerText->addAttribute('html', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText->addCData('Chennai');
// Answer 5
$xml->data->quiz->questions->question->answers->answer = NULL;
$xml->data->quiz->questions->question->answers->answer->addAttribute('points', '1');
$xml->data->quiz->questions->question->answers->answer->addAttribute('correct', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText = NULL;
$xml->data->quiz->questions->question->answers->answer->answerText->addAttribute('html', 'false');
$xml->data->quiz->questions->question->answers->answer->answerText->addCData('Goa');
// Write Data
$xml->saveXML($xmlFile);
?>
Если я закомментируйте обижая две линии (где AddAttribute применяется к ответ элемента) от каждого ответа, кроме ответа 1, то файл создается, но только один ответ, который содержит текст в Ответ 5.
Может ли кто-нибудь предложить, если есть какие-либо обходные пути для этой проблемы без изменения SimpleXMLElement объект?
так где же линия 46? –
Строка 46 находится всего в одной строке ниже комментария _ // Asnwer 2_ –