Как правильно сделать PHP врапер для XSL преобразования

gigaset

Guest
Как правельно сделать PHP врапер для XSL преобразования

Всем пламенный привет!!!

Помогите пож!

Хочу сделать сабж, для этого делаю:

xslt.php

#!/usr/bin/php
<?
$xh = xslt_create() or die('Can not do; xslt_create()');

if (!isset($argv[0]) || !eregi('^[a-z0-9_-]+$',$argv[0]))
$file = 'netinfo1';
else
$file = $argv[0];

$xml_file = $file.'.xml';
$xsl_file = $file.'.xsl';

if (!($result = xslt_process($xh, $xml_file, $xsl_file)))
{
print "Sorry, test.xml could not be transformed by test.xsl into";
print " result.xml the reason is that " . xslt_error($xh) . " and the ";
print "error code is " . xslt_errno($xh);
}
echo $result;

xslt_free($xh);
?>

httpd.conf

Listen 127.0.0.1:80
<VirtualHost *:*>
Options ExecCGI
AddHandler application/x-xml xml
ScriptAlias /cgi-bin/ "/home/localhost/cgi-bin/"
Action application/x-xml "/cgi-bin/xslt.php"
ErrorLog "/home/localhost/error.log"
</VirtualHost>

test.xml

<?xml version="1.0" encoding="windows-1251"?>

<?xml-stylesheet type="text/xsl" server-config="default-Config.xml" href="test.xsl" ?>

<!DOCTYPE DjesXmlBase [<!ELEMENT DjesXmlBase (Record)*>
<!ATTLIST DjesXmlBase
PrjName CDATA #IMPLIED
DateCreat CDATA #IMPLIED
Source CDATA #IMPLIED
SearchStr CDATA #IMPLIED>
<!ELEMENT Record (C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13)>
<!ELEMENT C1 (#PCDATA)>
<!ELEMENT C2 (#PCDATA)>
<!ELEMENT C3 (#PCDATA)>
<!ELEMENT C4 (#PCDATA)>
<!ELEMENT C5 (#PCDATA)>
<!ELEMENT C6 (#PCDATA)>
<!ELEMENT C7 (#PCDATA)>
<!ELEMENT C8 (#PCDATA)>
<!ELEMENT C9 (#PCDATA)>
<!ELEMENT C10 (#PCDATA)>
<!ELEMENT C11 (#PCDATA)>
<!ELEMENT C12 (#PCDATA)>
<!ELEMENT C13 (#PCDATA)>]>

<DjesXmlBase PrjName="Варашилов Г.А." DateCreat="26.10.2004" Source="Цетроникс, Госпел, Сигма" SearchStr="Чел">

<Record>
<C1>4</C1>
<C2>9 Января-Челюскинцев</C2>
<C3>А</C3>
<C4>http://centrus.wol.bz/9ynvara_cheluskincev.htm</C4>
<C5>4</C5>
<C6>6</C6>
<C7>4</C7>
<C8>4</C8>
<C9>4</C9>
<C10>4</C10>
<C11></C11>
<C12></C12>
<C13></C13>
</Record>

test.xsl


<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<BODY BACKGROUND="C:\ProVoldir\etc\tile_out.jpg">
<h1>
<xsl:apply-templates select="DjesXmlBase/@PrjName"/>
</h1>
<h3>
Выборка произведена по:
<xsl:apply-templates select="DjesXmlBase/@SearchStr"/>
<br/>
Дата создания:
<xsl:apply-templates select="DjesXmlBase/@DateCreat"/>
</h3>
<table border="1">

<tr>
<td><b>Цена</b></td>
<td><b>Расположение</b></td>
<td><b>Ст.</b></td>
<td><b>Фото</b></td>
<td>.</td>
<xsl:apply-templates/>
</tr>
</table>
</BODY>

</xsl:template>
<xsl:template match="Record">
<tr>
<td>
<xsl:apply-templates select="C1"/>
</td>
<td>
<a href="{C4}">
<xsl:apply-templates select="C2"/>
</a>
</td>
<td style="background-color:teal; color:white; padding:4px">
<xsl:apply-templates select="C3"/>
</td>
<td>
<xsl:apply-templates select="C6"/>
</td>
<td>
<INPUT TYPE="checkbox" NAME="ch" VALUE="otobr"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
########################################

В IE преобразование работает

а Apache выдает:

Parse error: parse error in z:\home\localhost\www\xslt\1.xml on line 1

В чем дело, ума не приложу :-(((((((
 

Basilio

Guest
Что-то мне подсказывет, что проблема с кодировкой
 

slach

Новичок
причем тут кодировка
у него <?xml воспринимается как php код

или сам по себе php код неправильный
 

gigaset

Guest
to slach

Так и есть - php не правельный :-(((
(я его в инете стянул, думал прокатит)

Исправил, поменял название xsl файла

Тоже самое :

Parse error: parse error in z:\home\localhost\www\xslt\test.xml on line 1

Видимо ве таки проблема с <?xml ....

Мне просто нужно чтобы XML без затей преобразовывался в HTML (не жестко прописаный, а любой)!!

Ну и совсем бы хорошо было чтобы xsl брался из xml

Может есть какойт то другой вариант как это сделать?
 

Basilio

Guest
Автор оригинала: slach
причем тут кодировка
у него <?xml воспринимается как php код

или сам по себе php код неправильный
Такая ошибка часто возникает, когда файл в семибитной кодировке читается как юникодный
 

gigaset

Guest
Это получается PHP нужно как то указать что нужно работать в семибитной кодировке?

Или только преобразовывать в юникод?

Если дело в PHP как же ему указать что он не прав?
 

gigaset

Guest
Перекодировал в юникод при помощи стандартного Блокнота
Поменял на:
<?xml version="1.0" encoding="UTF-8"?>

IE - преобразует нормально

Тот же результат.

Parse error: parse error in z:\home\localhost\www\xslt\test.xml on line 1
 

slach

Новичок
xslt.php
cам по себе правильный валидный ???
запуск бинарника php
с xslt.php и параметрами... что выдает ???
 

WMix

герр M:)ller
Партнер клуба
test.xml имеет 2 корневых элемента
DjesXmlBase
Record ;)


Parse error: parse error in z:\home\localhost\www\xslt\1.xml on line 1
ошибка явно пхпшная

и вообше какой это 1.хмл я его не вижу!!!

причем тут кодировка
у него <?xml воспринимается как php код
 

Vasya

Guest
А ПХП точно находится здесь "/usr/bin/php"?

Вот такой скрипт что говорит?

xslt.php
#!/usr/bin/php
<? phpinfo();?>
 
Сверху