alekciy
Новичок
Ошибка реализации XSLT процессора или особенность версии?
Начал изучение XSLT шаблонов и, как мне кажется, столкнулся с ошибкой реализации. Или может я что-то не так понял? Подскажите.
Суть ситуации:
Пусть имеется XML файл:
С которым ассоциирован шаблон преобразования:
Если открыть в Опере (9.22) или IE (6 какая версия процессора не знаю, в системе есть как msxml.dll версий 2 так и 3), то будет видна строка:
Если в FifeFox (1.5), то как я и ожидаю вижу:
Жирным шрифтом.
Я конечно не эксперт по XSLT, но XPath выражения знаю достаточно хорошо и собсвенно я ожида увидеть то, что мне выдает FF.
Проблема:
В PHP при использовании расширения XSL имеем такую же ситуацию как и с Opera и IE.
PHP версии 5.1 (тоже самое имеем и на 5.2) c XSL либой версии (какая точно не знаю):
Скрипт:
http://alekciy.ru/test/1_php.php
Возможно все дело в версии спецификации? Я ожидаю один результат исходя из понимания спецификации XSLT 1.0 от W3C, а тут процессор работает по другой версии более позней/ранней?
Вопрос:
Это ошибка реализации процессора, или я не так понимаю принцип написания XSLT шаблона? Проблема вообще решаема? Сейчас выход нашел в том, что открываю XML через DOM и самописный класс который добавляет динамически нотацию <?xml-stylesheet?> и соответсвенно преобразование ведется на стороне браузера, но тогда работать приходиться только через FF.
Начал изучение XSLT шаблонов и, как мне кажется, столкнулся с ошибкой реализации. Или может я что-то не так понял? Подскажите.
Суть ситуации:
Пусть имеется XML файл:
Код:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="1_xslt.xsl"?>
<!DOCTYPE SchemaBd [
<!ATTLIST ObjectType id ID #REQUIRED>
]>
<SchemaBd>
<ActionTypes>
<Action>действие 1</Action>
<Action>действие 2</Action>
<Action>действие 3</Action>
<Action>действие 4</Action>
</ActionTypes>
<ObjectTypes value="Список категорий">
<ObjectType>
<Attributes>
<Attribute name="god_vypuska">год выпуска</Attribute>
<Attribute name="moshhnost_dvigatelja">мощность двигателя</Attribute>
</Attributes>
<ObjectType>
<ActionList>
<Action type="1">
<Attributes>
<Attribute name="god_vypuska">тип кузова</Attribute>
<Attribute name="moshhnost_dvigatelja">цвет</Attribute>
<Attribute name="cena">цена</Attribute>
</Attributes>
</Action>
</ActionList>
</ObjectType>
<ObjectType>
<Attributes>
<Attribute name="gruzopodemnost">грузоподъемность</Attribute>
</Attributes>
</ObjectType>
</ObjectType>
</ObjectTypes>
</SchemaBd>
Код:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
<xsl:template match="/SchemaBd/ObjectTypes">
<html>
<head>
<title>Трансформация</title>
</head>
<body>
<b><xsl:value-of select="@value"/></b>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Код:
Список категорийдействие 1действие 2действие 3действие 4
Код:
Список категорий
Я конечно не эксперт по XSLT, но XPath выражения знаю достаточно хорошо и собсвенно я ожида увидеть то, что мне выдает FF.
Проблема:
В PHP при использовании расширения XSL имеем такую же ситуацию как и с Opera и IE.
PHP версии 5.1 (тоже самое имеем и на 5.2) c XSL либой версии (какая точно не знаю):
Код:
xslXSL enabled
libxslt Version 1.1.15
libxslt compiled against libxml Version 2.6.23
EXSLT enabled
libexslt Version 1.1.15
PHP:
<?php
// Load the XML source
$xml = new DOMDocument;
$xml->load('1_xml.xml');
$xsl = new DOMDocument;
$xsl->load('1_xslt.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
echo $proc->transformToXML($xml);
?>
Возможно все дело в версии спецификации? Я ожидаю один результат исходя из понимания спецификации XSLT 1.0 от W3C, а тут процессор работает по другой версии более позней/ранней?
Вопрос:
Это ошибка реализации процессора, или я не так понимаю принцип написания XSLT шаблона? Проблема вообще решаема? Сейчас выход нашел в том, что открываю XML через DOM и самописный класс который добавляет динамически нотацию <?xml-stylesheet?> и соответсвенно преобразование ведется на стороне браузера, но тогда работать приходиться только через FF.