- Таблица стилей XSLT не применяется к XML в Firefox. Как это исправить?
- 2 ответа
- XSL файл не видит XML тегов
- Решение проблем обработки XSLT на стороне клиента (часть 2)
- Отладка XSLT на клиенте
- disable-output-escaping=«yes» в firefox
- XSLT на стороне клиента
- Преобразование при помощи JavaScript
- Почему этот XSLT-stylesheet не работает так, как я хочу на этом XML?
- 3 ответа
Таблица стилей 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 префикса).
Источник