Поведение setParameter

ViJu

Новичок
Поведение setParameter

Проблема в невозможности передачи в XSLT строкового параметра содержащего как одинарные так и двойные кавычки, но насколько я понимаю таковой не должно быть по спецификации, и если меня читают люди программирующие на parser3, который работает с XML через теже libxml2 libxslt, то вот вам факт: В ПАРСЕРЕ ЭТО РАБОТАЕТ

Вот PHP код:

<?PHP
// XSL преобразование
if (@$_GET['file']) {
if (@$_GET['xsl']) {
$xslfile=$_GET['xsl'];
} else {
$xslfile='auto.xslt';
}
print transform($_GET['file'],$xslfile);
}

function transform($xmlfile,$xslfile) {

$xml = new DomDocument;
$xml->load($xmlfile);
$xsl = new DomDocument;
$xsl->load($xslfile);
$proc = new xsltprocessor;
$proc->importStyleSheet($xsl);

$value = <<<EOD
<div onclick="javascript: alert('asas')">asas</div>
EOD;

$proc->setParameter('', 'test', $value);

return $proc->transformToXML($xml);
}

Ошибка:
Warning: XSLTProcessor::transformToXml(): Cannot create XPath expression (string contains both quote and double-quotes) in C:\www\......\xsltr.php on line 27

XSLTproc.exe выдает туже ошибку: string contains both quote and double-quotes

Давайте нажалуемся Кристиану Стокеру?
 

ViJu

Новичок
Пробовал, и все прекрасно работало, если перед передачей в XSLT проводить setParameter('',$value,htmlentities($_VARS[$value]));

а потом в some.xslt
<xsl:stylesheet
xmlns:php="http://php.net/xsl"
...
<xsl:value-of disable-output-escaping="yes" select="php:function('html_entity_decode',$BLCK_header)"/>

но это не выход!!
теряется переносимость XSLT.
В том-то и дело - Почему приходиться заниматься такими трюками? где написано, что в параметре нельзя передать например это: <div onclick="javascript: alert('asas')">asas</div>

Кто-нибудь понимает о чем я? Это проблема libxslt и PHP. И видимо, Paf c parser.ru ee решил.
 

ViJu

Новичок
PHP5 версии 5.0.0, 5.0.2, 5.0.3, 5.0.4, в 5.1.0dev не пробовал, но думаю, что все также,
не просто так ведь появляется
Warning: XSLTProcessor::transformToXml(): Cannot create XPath expression (string contains both quote and double-quotes)
Проблема унаследована от того же XSLTproc, очень жаль что её решение отложили, но может найдется человек, способный ее исправить в сорцах пхп

-~{}~ 30.05.05 21:13:

Тогда согласитесь, что это проблема не php кодеров, а php разработчиков

-~{}~ 30.05.05 21:23:

XSLT - это стандарт, и в нем ничего нет про то, что я должен пользоваться какими то exslt или импортируемыми функциями для использования XSLT в качестве банального пасивного шаблона

Здесь я вижу, что разработчикам надо поработать над сторонней библиотекой (при всем моем уважении к Кристиану) также как приходилось исправлять gd
 

olpa

Новичок
XSLT does not define the mechanism by which parameters are passed to the stylesheet.
(Это из Спецификации)

Это проблема libxslt и PHP.
Нет, в libxslt проблемы нет. Проблема есть в xsltproc и XSLTProcessor.

Проблема такая. Функция "setParameter" (или как она там называется в xsltproc) в качестве парамера принимается XPath-выражение. Чтобы это выражение было воспринято как строка, надо передать нечто в кавычках, в одинарных или двойных. Класс XSLTProcessor добавляет их автоматически. Когда может.

Самое простое решение проблемы такое. После загрузки xslt надо найти нужный узел "param" и добавить к нему текстовый узел со значением $value.
 
Сверху