LINUX.ORG.RU

[PHP][xml]

 ,


0

0

Динамически создаю xml страничку. Использование html не подходит, т.к. необходимо использовать много формул написанных в MathML.
Суть проблемы:

//$Div - нормально работающий и отображающийся элемент документа, тоже был создан динамически
//и подключен к документу. Если не использовать приведенный ниже код - отображается корректно
$imgPic = new DOMElement("img");
$Div->appendChild($imgPic);
$ingPic->setAttribute("src","./1.jpg");

В итоге мы получаем:
<div><img src="./1.jpg"></div>
ну и естественно получаем ошибку, т.к. правильно будет:
<div><img src="./1.jpg" /></div>
Т.е. php создает не закрытый тег img, что вполне прокатит в HTML, но вызывает ошибку xml.

Интернет копаю уже с 21:00, на некоторых форумах уже оставлял топики, но там тишина. Может быть тут кто-нибуть про эти грабли что-либо знает.

Сразу скажу, что опыт php программирования у меня не большой и, скорее всего, ошибка где-то в моем коде, но я ни одного текста на эту тему ни на русском ни на английском не нашел...

★★★★★
Ответ на: комментарий от phasma

>> <img src="./1.jpg" />

>это как бы закрытый тэг

Ну так-то да, только вот я его ручками сюда вписал, а то что php генерирует 2-я строчками выше. И там он как раз открыт...

trex6 ★★★★★
() автор топика
Ответ на: комментарий от Deleted

$ingPic - неправильно перепечатал. в скрипте стоит $imgPic

Ответ уже нашел.
Ошибка была в использовании ->saveHTML() вместо ->saveXML()
Теперь все работает правильно.
Спасибо всем, кто участвовал в обсуждении.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

> Ошибка была в использовании ->saveHTML() вместо ->saveXML()

На самом деле, проблема решается установкой doctype для документа, тогда пустые тэги будут правильно сохраняться даже при использовании saveXML(). On the fly это делается примерно так:

$doc = new DOMDocument('1.0', 'UTF-8');

$dtd = $doc->implementation->createDocumentType('html', '-//W3C//DTD XHTML 1.0 Transitional//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd');

$doc->appendChild($dtd);

$doc->appendChild($doc->createElement('html'));

...

echo $doc->saveXML();

Подробности: http://php.net/manual/en/domimplementation.createdocumenttype.php

Ещё взгляните на библиотеку qJerry (http://qjerry.com/) — она существенно упрощает работу с XML. Инфа на сайте немного устарела, свежая версия здесь:

http://code.google.com/p/qjerry/downloads/list

theSoul ★★★
()
Ответ на: комментарий от future-of-the-lor

Вас мучает зависть?

Кроме негативных отзывов о пхп можете сказать что-то по теме?

roller ★★★
()
Ответ на: комментарий от future-of-the-lor

> Зачем так много символов доллара? У PHP-разработчиков комплекс по поводу зарплаты?

:-)))

kost-bebix ★★
()
Ответ на: комментарий от future-of-the-lor

>Зачем так много символов доллара?

Вот и выросло поколение, которое не видело Perl'а и bash'а...

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.