Xml stylesheet не работает

Таблица стилей XSLT не применяется к XML в Firefox. Как это исправить?

Я понятия не имею, почему мой код не взаимодействует со мной и моим xml. Прошу прощения за то, что даю картинки, но когда я даю код, сайт отображает конечный результат, а не сам код, и я не знаю, как его изменить.

Мой код XSLT Я действительно не знаю, что не так, кажется, что они неправильно связаны друг с другом, но я все еще невежественен.

2 ответа

Предупреждение: это решение может снизить безопасность вашего браузера Firefox! Как упоминалось в ответе @evilpie, вы также можете получить доступ к файлам через локальный браузер, что делает ненужным изменение приведенного ниже ответа.

Кажется, это обычная проблема, заключающаяся в том, что более новые версии Firefox применяют более строгую политику в отношении источника комбинации XML-XSLT. Если XML и XSLT являются локальными файлами, Firefox заблокирует / проигнорирует ссылку на XSLT.

Решение заключается в изменении одного параметра в about:config : Установить

Это должно сделать ваш XML-файл желаемым. Причины объясняются здесь, в Mozilla, в следующих «Возможных значениях и их последствиях»:

Верно:
Локальные документы имеют доступ к другим локальным документам в том же каталоге и в подкаталогах, но не к спискам каталогов. (По умолчанию)

Неверно: Локальные документы имеют доступ ко всем остальным локальным документам, включая списки каталогов.

Почему необходимо установить это значение на false , хотя XSLT находится в том же каталоге, что и XML, и не требует перечисления каталогов — я не знаю. Может быть, это какая-то причуда древней реализации Firefox XSLT.

Во-первых: я настоятельно рекомендую использовать локальный http-сервер вместо изменения каких-либо предпочтений в Firefox, которые делают вас менее безопасным.

Примерно так как Firefox 68 обрабатывает локальные файлы как всегда с перекрестным происхождением. (См. «локальный HTML-файл может привести к краже файла»). Это предотвращает различные проблемы безопасности и конфиденциальности, такие как атака, захватывающая локальные данные в той же папке, что и загруженный файл HTML. См. Также статью «Ограничения для URL-адресов файлов».

Источник

XSL файл не видит XML тегов

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Добавление недостающих тегов xsl
Здравствуйте! Подскажите пожалуйста! Пробую реализовать следующую задачу: настроить обмен данными.

XSL преобразование (XML->XML)
Добрый день. Стоит задача преобразовать XML из одной структуры в другую. Вроде бы простейшее.

XML и XSL
Добрый день! Есть XML файл и XSL файл, подключенный к XML файлу. В XSL я делаю таблицу. Проблема в.

XML XSL
Как из XML c помощью XSL сделать таблицу в которой была бы ссылка, описаная в xml файле между.

для XSL характерен декларативный подход, поэтому выбрось for-each в пользу apply-templates

Литература по XML/XSL
Какую можете подсказать литературу для начинающих в области XML/XSL?

XSL Для XML
Всем привет! такая проблема: есть XML-документ,надо сделать для него XSL, чтоюы данные в файле.

XML/XSL Xforms OpenOffice
Есть задача, использовать ООО для работы с Х формами. Интересно узнать на сколько гибкий и сложный.

Xml+xsl не отображается в таблице
Добрый вечер, очень прошу помочь мне с xml. Есть xml файл, который, по идее, после использования.

Источник

Решение проблем обработки XSLT на стороне клиента (часть 2)

В прошлой статье я описал как реализовать инклудинг и кеширование при обработке xsl-темплейтов на стороне клиента. Сегодня я раскажу с помощью каких инструментов можно проводить отладку xslt-преобразований на стороне клиента и о работе конструкции в firefox.

Отладка XSLT на клиенте

Сетевые ошибки

Для контроля сетевых ошибок можно использовать отладочные средства браузеров. Все отладочные средства firebug (firefox), dragonfly (opera) и devtools (chrome) могут показать какие ресурсы были загружены из сети непосредственно ассинхронным запросом. Например, если мы обрабатываем данные in_data.xml с помощью шаблона first.xsl, то загрузку этих данных мы сможем проконтролировать
— раздел «net» в firebug
— раздел «net» в dragonfly
— раздел «resources» в devtools.

Иначе дело обстоит если для успешной обработки нужно подгрузить дополнительный xsl-файл (инклуд). В этом случае firebug (firefox) не покажет, что что-то было загружено.

А интегрированные среды дебагинга dragonfly (opera) и devtools (chrome) покажут какие дополнительные xsl файлы были подгружены.

Ошибки обработки шаблонов

jQuery( ‘#id_div’ ).transform(
< xml: 'res/1.xml' ,
xsl: ‘res/1.xsl’ ,
success: function () <
jQuery( ‘#id_info’ ).html( ‘готово’ );
>,
error: function (xml_data, xsl_data, success, cur_obj, error) <
console.log( ‘xml: ‘ +xml_data);
console.log( ‘xsl: ‘ +xsl_data);
console.log( ‘success: ‘ +success);
console.log( ‘cur_obj:’ );console.log(cur_obj);
console.log( ‘error:’ );console.log(error);
>
>);

* This source code was highlighted with Source Code Highlighter .

В этом случае вывод ошибки будет примерно таким:

Событие «error» будет вызвано в случае возникновения ошибки. В функцию события будет передано несколько параметров, основной из которых — error — собстенно описание ошибки.

disable-output-escaping=«yes» в firefox

Описание проблемы

xsl:value-of select =»xxx» disable-output-escaping =»yes»/>

* This source code was highlighted with Source Code Highlighter .

Но в firefox, начиная самой первой версией и заканчивая всей третьей веткой (в firefox 4 не тестировал), не полная реализация xsl-процессора. Их xsl-процессор, который индентифицирует себя как «Transformiix», не обрабатывает disable-output-escaping=«yes». Этой ошибке уже много лет https://bugzilla.mozilla.org/show_bug.cgi?id=98168 и недавно мы «отмечали» 9-летие этой баги. Там же по ссылке написаны оправдания команды firefox, которые можно свести к одному — там много работы, если хотите правьте сами.

Решение проблемы

xxx > Резельтат поиска [CDATA[ i > «первый» i > ]] > xxx >

* This source code was highlighted with Source Code Highlighter .

xxx > Резельтат поиска i > «первый» i > xxx >

* This source code was highlighted with Source Code Highlighter .

то есть это будет уже не совсем верный xml-файл. И тогда мы получаем проблему в остальных браузерах, где такое решение работать уже не будет.

Другое решение проблемы

Я решил использовать другой подход. Использовать специальный фикс, написанный на javascript.

1. Вместо привычного в наших шаблонах придётся использовать вызов

xsl:call-template name =»inc_disable_output_escaping» > xsl:with-param name =»param» select =»xxx»/> xsl:call-template >

* This source code was highlighted with Source Code Highlighter .

Где темплейт inc_disable_output_escaping выглядит так:

xsl:template name =»inc_disable_output_escaping» >
xsl:param name =»param» > xsl:param >
xsl:choose >
xsl:when test =»system-property(‘xsl:vendor’)=’Transformiix'» >

div style =»display:none» class =»fix_ff_disable_output_escaping» > xsl:value-of select =»$param» disable-output-escaping =»yes»/> div >
xsl:when >
xsl:otherwise >
xsl:value-of select =»$param» disable-output-escaping =»yes»/>
xsl:otherwise >
xsl:choose >
xsl:template >

* This source code was highlighted with Source Code Highlighter .

function fix_ff_disable_output_escaping() <
jQuery( ‘div.fix_ff_disable_output_escaping’ ).each(
function (i, obj) <
var j_obj=jQuery(obj);
j_obj.replaceWith(Encoder.htmlDecode(j_obj.html()));
>
)
>

* This source code was highlighted with Source Code Highlighter .

Для декодирования html-мнемоник используется функция htmlDecode js-библиотеки Encoder.

PS Не забывайте отправлять правильный content-type для xml/xsl документов. А именно «Content-type: text/xml».

Источник

XSLT на стороне клиента

XSLT может использоваться для преобразования XML документа в XHTML в самом браузере клиента.

Преобразование при помощи JavaScript

В предыдущих главах рассказывалось как при помощи XSLT можно преобразовывать документ из XML в XHTML. Это делалось при помощи файла таблицы стилей XSL, который подключался в XML файле. После чего всю работу по преобразованию выполнял клиентский браузер.

Тем не менее, даже если в этом случае все отлично работает, бывают случаи, когда нежелательно включать ссылку на таблицу стилей в XML файл (например, это не сработает с браузерами не умеющими работать с XSLT.)

Более универсальным решением для осуществления преобразования будет использование JavaScript.

Благодаря использованию JavaScript мы сможем:

  • проводить специфические для браузеров проверки
  • использовать разные таблицы стилей в соответствии с потребностями пользователя и различных браузеров

В этом и состоит красота XSLT! Одной из целью разработки технологии XSLT была задача сделать возможным преобразование данных из одного формата в другой с поддержкой различных браузеров и различных потребностей пользователей.

XML файл и XSL файл

Взгляните на следующий XML документ, который уже фигурировал в предыдущих главах:

И на сопутствующую ему таблицу стилей XSL:

ВАЖНО: Обратите внимание, что в XML файле нет ссылки на XSL файл. Это означает, что XML файл может преобразовываться при помощи множества различных таблиц стилей XSL.

Преобразование XML в XHTML в браузере

Ниже представлен исходный код, который преобразовывает XML файл в XHTML на стороне клиента:

Пояснение

Функция loadXMLDoc() делает следующее:

  • Создает объект XMLHttpRequest
  • Используя методы open() и send() объекта XMLHttpRequest отправляет запрос на сервер
  • Получает с сервера запрошенные данные в формате XML

Функция displayResult() используется для отображения XML файла, преобразованного в соответствии с правилами XSL файла:

  • Загружает XML и XSL файлы
  • Проверяет, какой браузер у пользователя
  • Если Internet Explorer:
    • Используем метод transformNode(), чтобы применить таблицу стилей XSL к XML документу
    • Передаем преобразованный XML документ в заданный элемент (id=»example»)
  • Если другие браузеры:
    • Создаем новый объект XSLTProcessor и импортируем в него XSL файл
    • Используем метод transformToFragment(), чтобы применить таблицу стилей XSL к XML документу
    • Передаем преобразованный XML документ в заданный элемент (id=»example»)

Источник

Почему этот XSLT-stylesheet не работает так, как я хочу на этом XML?

Я новичок в XML / XSLT, и у меня возникли проблемы с преобразованием таблицы стилей XSLT в другой XML.

Вот мой XML-файл:

Я хочу преобразовать этот XML в следующий

Вот моя неудачная попытка с моим XSL

3 ответа

Ваш xpath не является правильным. Есть много способов сделать это. Это пример xslt для преобразования xml.

Обновлено для создания переформатированного xml по запросу.

Две вещи: при попытке создания скрипта не создается корневой элемент, что делает его недостаточно хорошо сформированным xml. Кроме того, нет необходимости использовать префикс, поскольку целевые узлы не находятся в пространстве имен, связанном с префиксом . Теперь, если вы хотите повторно использовать оригинальную книгу, рассмотрите использование local-name() или name() в качестве определенного имени:

Выход

Причина неудачи вашей попытки заключается в следующем:

Хотя входной XML содержит объявление пространства имен, это объявление нигде не используется и является полностью избыточным. Ни один из элементов во входном XML-файле не находится в пространстве имен, и ваша попытка адресовать их с помощью префикса, связанного с «http://www.w3schools.com’ пространством имен, завершается неудачей из-за этого.

Все, что вам нужно сделать, это удалить qws: префикс из ваших match и select выражений, и он будет работать.

Ну, почти все: вы также должны удалить ненужные объявления пространства имен:
и , а также exclude-result-prefixes=»hej» часть (вы даже не объявили пространство имен с помощью hej префикса).

Источник

Читайте также:  Planet nomads как настроить летательный аппарат
Оцените статью