Таблица стилей для XML не отображается в IE9 - PullRequest
2 голосов
/ 23 ноября 2011

У меня есть XML-документ, который сейчас даже не распознается как XML на IE9. Я попытался добавить правильный атрибут xmlns: xsl, также он имеет правильный заголовок, начинающийся с

<?xml version="1.0" encoding="UTF-8"?>

Этот xml отлично отрисовывается в IE 6 7 8, но не работает в IE9. Я не уверен, что это проблема, связанная с режимом Quirks, и если это так, я не уверен, что именно DOCTYPE следует использовать для документов XML. Любая помощь будет оценена. Ниже приведены первые несколько строк XML-документа.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/mobiledoc/jsp/empi/master/CCD.xsl" ?>
<ClinicalDocument xmlns="urn:hl7-org:v3" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:sdtc="urn:hl7-org:sdtc" 
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                  xsi:schemaLocation="urn:hl7-org:v3 http://xreg2.nist.gov:8080/hitspValidation/schema/cdar2c32/infrastructure/cda/C32_CDA.xsd" 
                  classCode="DOCCLIN" 
                  moodCode="EVN">

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Можете ли вы более конкретно указать, как он "даже не распознается как xml на IE9"? Появляется ли сообщение об ошибке или просто в IE9 оно выглядит иначе, чем в предыдущих версиях?

Первое, что делает ваш XML-файл - это связывается с таблицей стилей XSLT по адресу "/mobiledoc/jsp/empi/master/CCD.xsl", поэтому это может быть источником вашей проблемы. Некоторые предложения:

  • В качестве теста удалите бит <?xml-stylesheet .. ?>. У вас теперь одинаковое поведение во всех браузерах? (Возможно, это просто иерархическое представление файла XML). Если да, то проблема в вашей таблице стилей XSLT.

  • Что делает эта таблица стилей? Если он преобразует XML-файл в HTML, он может использовать некоторые неконформные (X) HTML-конструкции или стили, которые допускаются более ранними версиями IE, но в которых IE9 более строг. Если «не распознано» является какой-то проблемой макета / отображения, настройка таблицы стилей может исправить то, что вы видите в браузере.

Исходя из того, что вы сказали нам до сих пор, я думаю, что, вероятно, вам нужно начать.

ETA: итогом нижеприведенного разговора было то, что директива <xsl:output> принудительно вводила доктайп HTML 4.01 в вывод; изменение этого значения на <xsl:output method="html"/> (и исправление нескольких других проблем с преобразованием) устранило проблему в IE9.

1 голос
/ 02 мая 2012

Я рад, что проблема была исправлена ​​- в данном конкретном случае это.
Но реальная причина ошибки в IE9 пока не разглашается, поэтому я сделаю это здесь.

Причиной такого поведения является ошибка в обработке XSLT в IE9 .

Ну хорошо - это не совсем ошибка, просто плохое сообщение об ошибке.Дело в том, что IE9 применяет MSXML6 по умолчанию, и многое изменилось в отношении MSXML4.Когда в XSLT есть явная ошибка, об этом не сообщается - IE9, по-видимому, пропускает обработку по шаблонам text () по умолчанию, что приводит к представлению всех текстовых узлов.
Хуже, когда что-то делается в XSLT, которое по умолчанию запрещено вMSXML6, происходит то же самое.Так что по умолчанию запрещено в MSXML6?Много!Применяя Jscript, например.И DTD.И функция document () не будет работать.

В вышеприведенном случае можно было бы заподозрить из показанного текста (который, очевидно, исходит из применения шаблонов по умолчанию), что в xslt есть ошибка - ожидание обнаружения с помощью хороших инструментов.Но это поведение IE9 не так очевидно связано с xslt, когда в xml-части открытого файла нет текста (то есть, когда xslt сам предоставляет все данные, которые должны быть обработаны, например, путем импорта файлов xml во время выполнения, иливсе данные в xml, которые обрабатывает xslt, имеют атрибуты и имена узлов).Вам просто нужно знать ...

Вы можете увидеть сообщение об ошибке за всем этим самостоятельно, если перейдете к инструментам разработчика, нажав F12 (или выберите его в меню Инструменты).В подэкране инструментов разработчика выберите Script Menu и загрузите свою страницу сейчас.Вы увидите, что справа, в консоли, появляется сообщение об ошибке:
XSLT8690: XSLT processing failed.
При возникновении этой ошибки отображаются только текстовые узлы в XML (так, для пустого корневого узла XML,страница будет пустой).
Я мог найти только одну ссылку на эту ошибку в Интернете: http://www.wikistep.org/bugzilla/show_bug.cgi?id=4140.

Обратите внимание, что при выборе «вида совместимости» при нажатии на разорванную страницу страницыРядом с кнопкой обновления (которая не всегда доступна, другая ошибка -minor- IE9) страница возвращается к отображению IE8 и снова будет в порядке - ну, кроме каких-либо ошибок в xslt, конечно, но MSXML 4.0 неесть все эти ограничения, которые MSXML 6.0 имеет по умолчанию.Конечно, безопаснее, но очень раздражает.

Обратите внимание, что при выборе представления совместимости часть сайта URL файла добавляется в список сайтов, для которых автоматически применяется представление совместимости.
Чтобы воссоздать проблему, вам придется удалить сайт.из этого списка, нажав Alt, чтобы открыть меню, выбрав инструменты / настройки просмотра совместимости и удалив сайт из списка, прежде чем повторить попытку.
Также обратите внимание, что прием применения представления совместимости не всегда исправляет вещи: когданапример, xslt вызывает встроенный javascript, содержащий классы, недоступные в версии IE8 Jscript, xslt также не будет работать в представлении совместимости.

Теперь, что можно с этим сделать?На самом деле я не уверен - стоит еще вопрос по SO!
Свойства, которые по умолчанию отключены, могут быть включены - но примеры, которые я видел, делают это только при загрузке строки типа XML в объект DOM в последовательностиоператоры - и затем можно назначить новому объекту DOM необходимые свойства перед загрузкой строки.
Здесь IE9 автоматически загружает XML, а также загружает XSLT для обработки XML.Так где, черт возьми, мы можем установить свойства загрузки XML до того, как загрузка произойдет?
Я уверен, что это займет время - но я узнаю!

0 голосов
/ 27 июня 2012

Когда вы используете функцию xslt, например, document('../_data/nav.xml')/page:nav | document('http://www.ok.kz/_data/nav.xml')/page:nav, и если она указывает на другой сервер, она не будет отображать ваш документ без объяснения, просто пустая страница или xml в виде текста

...