XML parser error 4: not well-formed при использовании xslt_process()

Zorro

Guest
XML parser error 4: not well-formed при использовании xslt_process()

Здраствуйте!
Решил я постичь связку XML+XSLT и буквально сразу наткнулся на такую вот неприятность: скрипт выдает ошибку "XML parser error 4: not well-formed (invalid token)".
PHP:
$dir=$_SERVER["DOCUMENT_ROOT"]."/xslt/";
$xsltr=xslt_create();
xslt_set_base($xsltr,"file://$dir");
$result=xslt_process($xsltr,"data.xml","style.xsl");
if($result){
 echo "Parsing complete\n";
}else{
 echo "Error during parsing: ".xslt_error($xsltr)."\n";
}
data.xml:
Код:
<?xml version="l.0"?>
<stuff>
	<todo>First</todo>
	<todo>Second</todo>
	<todo>Third</todo>
	<todo>Fourth</todo>
	<todo>Fith</todo>
	<todo>Sixth</todo>
</stuff>
style.xsl:
Код:
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:strip-space elements="stuff"/>
<xsl:output method="xml"/>
<xsl:template match="todo">
  <xsl:for-each select="stuff">
    <xsl:sort select="."/>
    <p>
      <xsl:number value="position()" format="1. "/>
      <xsl:value-of select="."/>
    </p>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Может есть какие-нибудь догадки?
 

Zorro

Guest
Re: Re: XML parser error 4: not well-formed при использовании xslt_process()

Автор оригинала: matross
Ты забыл назвать платформу, но судя по всему это windows...
да - она. и Apache/2.0.46 (Win32) PHP/4.3.9
Помоему, вместо этого нуно писать
$dir = 'file://' . getcwd () . '/';
потому что $_SERVER["DOCUMENT_ROOT"] возвращает полный путь от apache servic'a, а тебе нуно полній путь от самого начала... Могу ошибаться, но попробуй....
Попробовал - никаких сдвигов...
Судя по ошибке - дело гдето в XML... Только там негде - файл до убогого прост...
 

Zorro

Guest
Автор оригинала: chameleon
говоришь:

а реально на выходе, судя по исходнику, получается что-то, не имеющее DocumentElement...
Убрал - усе тоже самое....
Код:
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:strip-space elements="stuff"/>
<xsl:template match="todo">
  <xsl:for-each select="stuff">
    <xsl:sort select="."/>
    <p>
      <xsl:number value="position()" format="1. "/>
      <xsl:value-of select="."/>
    </p>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
 

chameleon

Новичок
Убрал - усе тоже самое....
и что? :)...к RTFM тебя отправить? какой метод используется по-умолчанию? правильно, xml.
не убирать надо а добавлять:
PHP:
<xsl:template match="todo">
<div>
  <xsl:for-each select="stuff">
    <xsl:sort select="."/>
    <p>
      <xsl:number value="position()" format="1. "/>
      <xsl:value-of select="."/>
    </p>
  </xsl:for-each>
</div>
</xsl:template>
 

Zorro

Guest
chameleon
Сделал усе как Вы посоветовали, но результат упорно не хочет меняться.....

И на RTFM сходил - нет там ничего про XSLT
 

chameleon

Новичок
а вообще, в IE или Gecko, например, оба файла (xml & xslt) по-отдельности открываются без ошибок? деревья красивые рисуются?

-~{}~ 03.06.05 00:52:

olpa
глаз-алмаз, однако :)...
 

Zorro

Guest
Автор оригинала: chameleon
а вообще, в IE или Gecko, например, оба файла (xml & xslt) по-отдельности открываются без ошибок? деревья красивые рисуются?
xslt и там и тут нормально рисуется, а вот xml и в IE и в Firefox 1.0.4 вызывает ошибку....
IE:
Код:
Не удается отобразить страницу XML 
Не удается просмотреть ввод XML с использованием списка стилей . Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее. 


--------------------------------------------------------------------------------

Ошибочный номер версии. Ошибка при обработке ресурса ''http://localhost/xslt/data.xml''. Строка 1,Положение 16 

<?xml version="l.0"?>
---------------^
Firefox:
Код:
Ошибка синтаксического анализа XML: ошибка синтаксиса
Адрес: [url]http://localhost/xslt/data.xml[/url]
Строка номер 1, символ 16:<?xml version="l.0"?>
---------------^
 

Zorro

Guest
Автор оригинала: chameleon
без шуток, он тебе тоже самое показал - реальная опечатка в атрибуте @version.

какая та же? в браузерах открывается теперь без ошибок?
с теми же самыми ошибками.... Но! Я добавил атрибут @encoding
Код:
<?xml version="1.0" encoding="windows-1251"?>
и браузеры теперь отображают корректно. А вот скрипт по-прежнему выдает ошибку :(

-~{}~ 03.06.05 01:10:

Хм... Вопщем все заработало. Дело было....страшно сказать... в путях... Я явно задал путь для xslt_set_base() и теперь все ок.
Вот он - рабочий пример! :)
PHP:
$dir="D:/Apache/Apache2/wwwdocs/xslt/";
$xsltr=xslt_create();
xslt_set_base($xsltr,"file://$dir");
$result=xslt_process($xsltr,"data.xml","style.xsl","res.html");
if($result){
 echo "Parsing complete\n";
}else{
 echo "Error during parsing: ".xslt_error($xsltr)."\n";
}
Спасибо всем за помощь\сочуствие! Отдельное спасибо chameleon
 
Сверху