| |
|
|
| | Предлагаю всем миром разобраться в этом деле - у самого не получается. Есть простой файл news.xml
<?xml version="1.0"?>
<newsLine>
<news date="1.1.2007">
<title>title 1</title>
<text>news text 1</text>
</news>
<news date="5.1.2007">
<title>title 2</title>
<text>news text 2</text>
</news>
<news date="10.1.2007">
<title>title 3</title>
<text>news text 3</text>
</news>
</newsLine>
|
Для начала нужно просто вывести эти новости на веб-страничку. Пишу первую строку кода:
<?php
$doc = new DOMDocument();
?>
|
И сразу же получаю ошибку:
Fatal error: Undefined class name 'domdocument' in z:\home\localhost\www\testdir\xml\parser.php on line 2
Где этот класс нужно определять? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(27.11.2007 в 12:15)
| | | Установите PHP 5 и будет всё работать. | |
| |
|
|
| |
|
|
| |
для: Саня
(27.11.2007 в 14:26)
| | | Так установил всё - не помогает. | |
| |
|
|
| |
|
|
| |
для: coloboc66
(27.11.2007 в 12:15)
| | | в денвере дело происходит я так понимаю?
Надо установить расширение php_domxml.dll для вашей версии php
UPD. Если версия 5 то подключать не надо, надо наоборот выключить
Закоментируйте в php.ini строчку
если она там есть | |
| |
|
|
| |
|
|
| |
для: Axxil
(27.11.2007 в 14:31)
| | | Да - в Денвере. Установил Base_PHP5 и расширения РНР. Тут я немного недопонимаю: у меня получилось так: если я присваиваю файлу расширение *.php, то автоматически запускается версия 4 интерпретатора РНР. А если присваиваю расширение *.php5, то автоматически запускается версия 5 интерпретатора и вышеуказанная мной строчка работает без ошибок. Непонятно, почему при установке РНР5 остался РНР4? На сайте Денвера написано, что РНР5 работает не как модуль апача, а как CGI - здесь я тоже не очень понимаю принципиальную разницу между двумя этими понятиями и чем это грозит? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(27.11.2007 в 15:02)
| | | при модуле - работает быстрее и безопаснее, можно юзать basic-авторизацию и фунции апача типа сбора заголовков | |
| |
|
|
| |
|
|
| |
для: mihdan
(27.11.2007 в 15:35)
| | | Ну хорошо: вот, наверное, я правильно написал первые строчки
<?php
$doc = new DOMDocument();//создаём экземпляр ДОМ-документа
$doc->load('news.xml');//загружаем в него XML-файл
?>
|
А вот как дальше? Можно было бы просто разбирать без модели DOM, но это наверное неправильно. Например, я хочу, чтобы каждый из узлов news ложился в строку таблицы, где в 1-ой ячейке был бы атрибут тега news date, во второй - значение узла title, в третьей - значение узла text.
А как? АААааааааа????? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(27.11.2007 в 16:35)
| | | лучше XSLT использовать.
при xmlе вида
<content>
<news date="27.11.2007">
<title>news</title>
<text>text of news</text>
</news>
</content>
|
xsl вида
<xsl:template match="/content">
<table>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="news">
<tr>
<td><xsl:value-of select="@date" /></td>
<td><xsl:apply-templates select="title" /></td>
<td><xsl:apply-templates select="text" /></td>
</tr>
</xsl:template>
|
на выходе получим
<table>
<tr>
<td>27.11.2007</td>
<td>news</td>
<td>text of news</td>
</tr>
</table>
|
| |
| |
|
|
| |
|
|
| |
для: Lelik
(27.11.2007 в 18:02)
| | | Хммм... Как заманчиво. Но xsl, я слыхал, очень сложен для усвоения? | |
| |
|
|
| |
|
|
| |
для: coloboc66
(27.11.2007 в 21:10)
| | | ничего особо сложного. основных сложностей две: практика; xPath; (это я по себе сужу). Но есть огромные преймущества: вынос html-разметки из php-кода (в нашем случае, а вообще из серверных сценариев), или другими словами данные, полученные с помощью серверных сценариев, можно получать в любом порядке, а в результате получаем то, что хотим (иначе приходится получать обязательно по порядку данные для шапки, контента, футера); иногда из-за разметки в php-коде, необходимо делать по нескольку запросов для вывода одних и тех же данных, в связке xml+xsl это обходится стороной; при редизайне надо править только файл xsl-разметки, что существенно облегчает саму процедуру редизайна.
ЗЫ. написал так написал: можно в микрософт какой-нибудь копирайтером идти :) | |
| |
|
|
| |
|
|
| |
для: Lelik
(27.11.2007 в 22:28)
| | | Что-то у меня ваш пример с XSL не работает, может настраивать нужно... Потом начну разбираться.
Со своим примером разобрался относительно чтения:
echo '<table border=1px>';
$items=$doc->getElementsByTagName('news');
for ($i = 0; $i < $items->length; $i++) {
echo '<tr>';
if($items->item($i)->hasAttributes())echo '<td>'.$items->item($i)->getAttribute('date').'</td>';
echo '<td>'.$items->item($i)->nodeValue . "</td>";
echo '</tr>';
}
echo '</table>';
|
А вот как добавить к документу новый узел новостей? Пишу:
$news=$doc->createElement('news');
$news->setAttribute('date','28.11.2007');
$title=$doc->createElement('title');
$title->nodeValue='title4';//по-моему здесь что-то не так
$text=$doc->createElement('text');
$text->NodeValue='text4';//и здесь
$news->appendChild($title);
$news->appendChild($text);
$items=$doc->childNodes;
$items->item(0)->appendChild($news);
|
Но значения узлов не выводятся. Почему? | |
| |
|
|