Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с форматированием вывода DOM 
:(
    Опции темы
Resident
  Дата 18.10.2008, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Есть документ XHTML следующего содержания:

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xml:lang="ru" lang="ru" xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta name="description" content="description" />
<meta name="keywords" content="keywords" />
</head>
<body>
  ....
</body>
</html>


Я загружаю его в DOM:

Код

$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);
echo $dom->saveHTML();


И на выходе вместо:
Код

<meta name="description" content="description" />
<meta name="keywords" content="keywords" />


Я получаю:
Код

<meta name="description" content="description">
<meta name="keywords" content="keywords">


И после этого валидатор начинает ругаться на эти и аналогичные одиночные, незакрытые дескрипторы вроде <br> вместо <br /> и т.д.

Подскажите пожалуйста как можно выйти из такой ситуации и заставить DOM генерировать HTML согласно DTD?
PM   Вверх
Serkys
Дата 19.10.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: нет
Всего: 22



Ну так ты ведь сам сказал "дай мне HTML, а не XML" smile
Код

echo $dom->saveHTML();

Замени на
Код

echo $dom->saveXML();

PM MAIL   Вверх
Resident
Дата 22.10.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Пробывал я уже saveXML() вместо saveHTML(), но проблемы это не решило. Сайт на выходе отображался некорректно, тогда как при использовании метода saveHTML() все отображалось нормально. Может это из-за того, что код не проходит валидацию XHTML?
PM   Вверх
bars80080
Дата 22.10.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 1
Всего: 315



возможно при saveXML() на выходе добавляется <?xml ?> в начало?
PM MAIL WWW   Вверх
sTa1kEr
Дата 28.10.2008, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Во первых у вас вообще отсутствует декларация XML документа ('тег <?xml?>')
А во вторых нужно вызывать не только метод saveXML(), но и loadXML()
Код

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xml:lang="ru" lang="ru" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="description" content="description" />
<meta name="keywords" content="keywords" />
</head>
<body>
  ....
</body>
</html>';
$dom = new DOMDocument();
$dom->loadXML($xml);
echo $dom->saveXML();

PM MAIL   Вверх
Resident
Дата 28.10.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Цитата(bars80080 @ 22.10.2008,  13:06)
возможно при saveXML() на выходе добавляется <?xml ?> в начало?

Не добавляется.

Цитата(sTa1kEr @ 28.10.2008,  02:30)
Во первых у вас вообще отсутствует декларация XML документа ('тег <?xml?>')
А во вторых нужно вызывать не только метод saveXML(), но и loadXML()
Код

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xml:lang="ru" lang="ru" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="description" content="description" />
<meta name="keywords" content="keywords" />
</head>
<body>
  ....
</body>
</html>';
$dom = new DOMDocument();
$dom->loadXML($xml);
echo $dom->saveXML();


Насколько мне известно для XHTML объявление декларации XML документа не требуется. Во всяком случае валидатор за это ничего не писал. Подставил строку "<?xml version="1.0" encoding="windows-1251"?>" в самом начале документа. Делаю $dom->loadXML($xml) $dom->saveXML() и на выходе почему то получаю не весь документ, а одну эту строку.

PM   Вверх
sTa1kEr
Дата 28.10.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Цитата(Resident @  28.10.2008,  14:47 Найти цитируемый пост)
Насколько мне известно для XHTML объявление декларации XML документа не требуется.

Зато для XML требуется.

Цитата(Resident @  28.10.2008,  14:47 Найти цитируемый пост)
Во всяком случае валидатор за это ничего не писал.

При чем тут валидатор? Валидатор не имеет никакого отношения к парсингу.
Парсите вы XML документ, значит и соответствовать он должен всем стандартам XML.

Цитата(Resident @  28.10.2008,  14:47 Найти цитируемый пост)
и на выходе почему то получаю не весь документ, а одну эту строку.

Привидите сам код, который не работает.

[telepathy]Вы не перепутали случаем названия переменных с контентом? В моем пример это $xml, а в вашем $html[/telepathy]
PM MAIL   Вверх
Resident
Дата 1.11.2008, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Цитата(sTa1kEr @ 28.10.2008,  15:14)

    
Цитата(Resident @  28.10.2008,  14:47 Найти цитируемый пост)
и на выходе почему то получаю не весь документ, а одну эту строку.

    Привидите сам код, который не работает.

Приведенный вами пример работает как положено, но если использовать xml с главной страници сайта http://www.thehack.ru/ , то вылетает куча варнингов и отображается только <?xml version="1.0" encoding="windows-1251"?>, хотя, если использовать метод loadHTML() все парсится нормально.

Примеры кода:

Не работает.
Код

$xml = file_get_contents('http://www.thehack.ru/');
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($xml);
echo $dom->saveXML();


Работает.
Код

$xml = file_get_contents('http://www.thehack.ru/');
$dom = new DOMDocument('1.0', 'windows-1251');
$dom->loadHTML($xml);
echo $dom->saveHTML();


Цитата(sTa1kEr @ 28.10.2008,  15:14)

  [telepathy]Вы не перепутали случаем названия переменных с контентом? В моем пример это $xml, а в вашем $html[/telepathy]

В переменной $html хранится xhtml код.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.