Sablotron

Anton

Just Programmer
Sablotron

Ух блин, плачу уже с этим XML :-(((

Гы ... скармливаю саблотрону такой XML :

<?xml version="1.0" encoding="UTF-8"?>
<newsLine>
<news id="1">
<date>2002-12-12</date>
<title>title 1</title>
<text>news text 1</text>
</news>
<news id="2">
<date>2002-10-10</date>
<title>title 2</title>
<text>news text 2</text>
</news>
<news id="3">
<date>2002-11-11</date>
<title>title 3</title>
<text>news <bold>text 3</bold></text>
</news>
</newsLine>

А он говарит:
Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in c:\!server\htdocs\xml\test.php3 on line 4

Хотя Эксплорер только что понимал это XML нормально и без проблем (там конечно еще ссылка стояла на XSL файл, я ее убрал перед кормолением саблотрону). В чем прикол?

Sablotron 0.96 PHP 4.2.3 .... ????? А?
 

Sababa

Guest
код какой?

дай угадаю:

$xml = '
<?xml version="1.0" encoding="UTF-8"?>
<newsLine>
<news id="1">
....
';

так присваиваешь xml?
 

Anton

Just Programmer
Неа, это я уже в форуме видел. :)) Я из файла беру.

$xh = xslt_create();
$result = xslt_process($xh, 'c:/!server/htdocs/xml/news.xml', 'c:/!server/htdocs/xml/news.xsl');
echo $result;
 

Anton

Just Programmer
Если принципиально то
http://195.19.203.206/xml/
там лежат эти файлы ...
 

Sababa

Guest
тогда попробуй:

xslt_process($xh, 'file://news.xml', 'file://news.xsl');
 

Sababa

Guest
и в new.xsl пропиши:
<?xml version="1.0" encoding="UTF-8" ?>
 

Anton

Just Programmer
Гы ... заработало ... А почему так извращенно надо писать??? 'file://news.xml' ???? Кстати у меня он почемуто так не понял, а искал в c:\!server\apache\ , поэтому пришлось писать полный путь. Это тоде почему сделал это гад???

Спасибо тебе большое. Если ты питерский, то с меня пиво :) Если нет, то перешлю по почте ... электронной :)) Спасибо за терпеливость к чайникам.
 

Ekklipce

Новичок
этот привер работает, без того хитрава значка..

если выделить ТЕ ЖЕ валидные xml и xsl в отдельный файл :

PHP:
$root = getcwd();
$xh = xslt_create();
$result = xslt_process($xh, $root.'test.xml', $root.'test.xsl');
НЕ РАБОТАЕТ..
(игрался с file:// - впустую...)

_______________
вопрос снимаецца, разобралсмя..
файл:\\ пашет
 

Didia_Sc

Guest
Прива!
Решил не создавать новой темы.

Платформа: Linux
PHP: 4.3.4
Apache: 1.3.27

Составил XSL и XML, вроде корректны, при скармливании XML файла IE данные выводся как и задумано по шаблону.

А вот при выводе средствами PHP возникает ошибка:
Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in /printxml.php on line 17

==========================================
Заголовок XML:
===========
PHP:
[color=blue]<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="my.xsl"?>[/color]
===========
Заголовок XSL:
===========
PHP:
[color=blue]<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>[/color]
====================
Текст Скрипта printxml.php
====================
PHP:
[color=blue]<?php
    // Инициализируем XSLT-процессор
    $xslt = xslt_create() or die("Can't create XSLT handle!");
    // Выполняем преобразование
    xslt_process($xslt,'http://site.ru/my.xml','http://site.ru/my.xsl');
    // Выводим результат
    echo $result;
    // Освобождаем ресурсы
    xslt_free($xslt);
?>[/color]
==============================================

Перепробовал все способы(чере элементы массива, просто через переменные, ну и жеско указывал/как в примере выше/) передачи xml и xsl в xslt_process, не помогает. Пробывал пример из статьи указанной чуть выше, тоже болт.

Проверил PHPinfo
===============
XSLT
=====
SLT support: enabled
Backend: Sablotron
Sablotron Version : 1.0.1
Sablotron Information: Cflags: -O2 -g -pipe -march=i386 -mcpu=i686 Libs: -L/usr/lib -lexpat -ljs Prefix: /usr


====
XML
====
XML Support: active
XML Namespace Support: active
EXPAT Version: 1.95.6

=============================

Решил установить свежие EXPAT и Sablotron. Скачал и установил expat-1.95.8, Sablot-1.0.2. Рестартанул апач на всякий пожарный, глянул PHPinfo - информация старая.
Снова полазил по архиву. Нашел сообщения в которых писали пути просматриваются последов-но и как только нужный модуль находится то сразу и подключается, т.е. пути к старым модулям читаются в первую очередь и ....

Вообщем запутался окончательно. В Администрировании Linuxa я не особо соображаю.

подскажите плз как проверить работоспособность Sablotrona, как задействовать новые релизы или я гдето натупил.
Помогите люди добрые!!!

З.Ы. Автор выдержал цензурный стиль, в этом ему помогла искарёженная банка пива :)
 

slach

Новичок
xslt_process($xslt,'http://site.ru/my.xml','http://site.ru/my.xsl');

а ты уверен что будет работать схема http:// ???
IMHO не должна =)
 

gokiburi

Guest
Поковыряв доки пых ни нашел ни одного упоминания про то что можно использовать http://bla-bla/file.xml, вместо этого надо его сначала считывать в переменную а потом только скармливать саблотрону. А на счет file:// в доке четко сказано
Note: Please note that file:// is needed in front of path if you use Window
или доки читать теперь уже не модно?
 

Elaphe

Новичок
Автор оригинала: Anton
Гы ... заработало ... А почему так извращенно надо писать??? 'file://news.xml' ???? Кстати у меня он почемуто так не понял, а искал в c:\!server\apache\ , поэтому пришлось писать полный путь. Это тоде почему сделал это гад???

Спасибо тебе большое. Если ты питерский, то с меня пиво :) Если нет, то перешлю по почте ... электронной :)) Спасибо за терпеливость к чайникам.
Вроде никто не ответил...
Вообщем функцию:
PHP:
xslt_set_base
посмотри ::).
 
Сверху