У меня есть некоторые проблемы с созданием функции для замены элементов вопросов и ответов в моем файле XML. Я провел много исследований, изучая php dom, но я застрял в создании этой функции. Проблема в том, что когда я пытаюсь получить строку родительского элемента по идентификатору атрибута, он возвращает null или когда я использую xpath, он возвращает пустой объект. Я не знаю, будет ли функция работать правильно после того, как я получу правильный родительский элемент, но я думаю, что это следующий шаг.
мой XML выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row id="1">
<question>Wat doet de vuilnisman?</question>
<answer>Hij tilt de vuilnisbak in de vuilnisauto.</answer>
</row>
<row id="2">
<question>Wat zegt de tandarts vaak?</question>
<answer>U mag nu spoelen.</answer>
</row>
</root>
и моя функция php:
//modifies rows
function modifyRows($file, $rowIds, $rowText) {
$xmlDoc = new DOMDocument();
$xmlDoc->preserveWhiteSpace = false;
$xmlDoc->formatOutput = true;
$xmlDoc->load($file);
foreach($rowIds as $rowId) {
$parent = $xmlDoc->getElementById($rowId);
for($i=0;$i<count($rowText);$i++) {
$newQ = $xmlDoc->createElement('question');
$qText = $xmlDoc->createTextNode($rowText[$i]);
$qText = $newQ->appendChild($qText);
$newA = $xmlDoc->createElement('answer');
$aText = $xmlDoc->createTextNode($rowText[$i++]);
$aText = $newA->appendChild($aText);
}
$oldQ = $parent->getElementsByTagName('question');
$oldA = $parent->getElementsByTagName('answer');
$parent->replaceChild($newQ, $oldQ);
$parent->replaceChild($newA, $oldA);
}
$xmlDoc->save($file);
}
$rowIds — это массив, содержащий номера строк, которые были изменены, и rowText в массиве, который содержит строки вопросов и ответов, такие как массив (0 => «вопрос», 1 => «ответ») и т. д. Содержимое XML-файла может увеличиваться или уменьшаться путем добавления или удаления строк. Для этого я уже сделал "рабочие" функции.
parentElement
в DOMDocument IIRC, а для xpath это..
, как в файловой системе. Однако кажется, что ваша проблема находится в другом месте, потому что вы уже не можете получить элемент с идентификатором, не так ли? - person hakre   schedule 25.04.2013