| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > XSLT Трансформация |
| Автор: t77 14.7.2010, 18:48 | ||
| Доброе время суток. Необходимо сделать трансформацию в ЙС следующим путем: 1. Загрузить ХМЛ документ 2. Загрузить ХСЛ документ 3. Сделать трансформацию 4. Закинуть результат в элемент DIV. Дело в том, что код для IE работает, а для Firefox-а нет! Поэтому привожу вашему вниманию код для Firefox-а:
Мозила ругается на строку 33 Почему не получается сделать трансформацию? Что я делаю не так? Пожалуйста помогите! |
| Автор: Amphiluke 14.7.2010, 19:11 | ||
?? |
| Автор: t77 14.7.2010, 22:47 | ||
Amphiluke, я проделал следующую вещь:
уже в первой строке вылетает и ругается срашным матом. |
| Автор: t77 14.7.2010, 23:57 | ||||
Ну вообщето мне необходимо результат трансформации закинуть в мой Div. Дело в том, что именно так делается для браузера Internet Explorer. Представте себе там это работает!
Объект - stepObj я получаю как параметр из функции- XSLTTransformation. А про него не забыли! Как раз в той строке, где пытаюсь сделать трансформацию, именно этот объект я передаю. |
| Автор: sir_nuf_nuf 15.7.2010, 09:38 |
| В свое время испытал много проблем с XSLT в браузерах.. Кривая это технология. Что бы хоть как - то уменьшить проблем с переносимостью, советую использовать какую-либо JS обертку, например http://dev.abiss.gr/sarissa/ |
| Автор: Amphiluke 15.7.2010, 09:48 | ||||||||
В первом посте вы сами заявили: говорим о FF. Сейчас проверил еще раз: да, здесь нельзя использовать innerHTML, как в IE, а нужно добавлять содержимое методами insertBefore, appendChild или подобными. Если вы присвоете результат, возвращенный методом transformToFragment, свойству innerHTML, то и получите в своем div'е одну строку: [object DocumentFragment].
Ну да, как же. Я говорю, что бессмысленно было писать эту строку:
если в следующей строке вы просто-напросто перезаписываете заново переменную xmldoc, забывая результат, возвращенный методом createDocument. |
| Автор: t77 15.7.2010, 11:11 | ||
| Мозги закипают Привожу вашему вниманию два варианта одного и того же кода. Первый для ИЕ а второй для Firefox. Где первый вариант работает а второй вариант, тот, что для Firefox-а нет!
Помогите мне пожалуйста сделать то же самое, чтобы работало и в Firefox. Не хочет работать! Как мне это сделать ? |
| Автор: Amphiluke 15.7.2010, 12:27 | ||||||
| Блин. Вот пример, адаптированный из учебника для вашего кода. Я так и не добился от вас, что за ошибка вызывает «страшный мат» у FF. Поэтому проверьте просто, будет ли работать у вас хотя бы это. У меня работает! Если у вас — нет, то хз. myXSLFile.xsl
myXMLFile.xml
Главная (оставил только код для FF, раз с IE проблем нет)
|
| Автор: t77 15.7.2010, 15:02 | ||||
| ваш код у меня работает с условием, что xml файл находится в отдельном файле. Тоесть создав три файла как вы здесь показываете все работает!!! Но у меня в коде, в аппликации, где я получаю xml документ из объекта xslObj, не работает! Может я неправильно считываю xml из объекта?? Скажите пожалуйста как заменить строки:
для браузера Firefox ?? P.S. Даже не знаю, что и думать... А может быть, что для Файрфокса имеется другой синтакс ХСЛ ?? Добавлено через 10 минут и 57 секунд Что же касается ошибки, которую я получаю при трансформации:
|
| Автор: Amphiluke 15.7.2010, 17:05 | ||||||
Ну вы же сами, вроде, где-то в каких-то темах недавних уже писали это.
Что-то вот этого я не понял. Какие-то слова незнакомые. Так что-ль?
|
| Автор: t77 15.7.2010, 19:04 | ||||||
Нет, нет, никакого встроеного в HTML-страницу xml-а нет. Объект stepObj.xml ,является XML документом, с помощью которго проделывается трансформация.
Нет, не работает все равно. Получаю то же самое исключение, что и раньше
|
| Автор: Amphiluke 15.7.2010, 19:12 | ||
А откуда он берется? Добавлено через 1 минуту и 5 секунд Вот я вижу, он приходит как параметр ф-ции XSLTTransformation. А откуда и как — не ясно. |
| Автор: t77 15.7.2010, 19:31 | ||
Amphiluke, да действительно он передается функции XSLTTransformation как параметр. Данную функцию заряжает объектом stepObj, другая функция и так далее. Тот же объект как вы видите из вышеприведенного мною примера используется в коде для IE. И без каких либо проблем проделовается трансформация и все красиво работает. Исходя из этого не думаю, что проблема в данном объекте. Проверяю содержание объекта в обоих случаях, и при запуске кода в ИЕ и при запуске ФФ. Содержание и структура объекта stepObj идентичны. |
| Автор: Amphiluke 15.7.2010, 19:44 | ||
t77, если не сложно, выполните, please, перед вызовом метода transformToFragment этот alert:
и покажите здесь, что написалось. |
| Автор: t77 15.7.2010, 20:26 | ||||
Добавлено через 3 минуты и 58 секунд а вот что получаем в Internet Explorer:
|
| Автор: Amphiluke 15.7.2010, 20:35 |
| Ясно. Стало быть, ваш объект stepObj не документ XML, а какая-то его нода? Меня просто заинтересовала эта строчка: и ее сакраментальный смысл. |
| Автор: t77 15.7.2010, 20:38 |
| Amphiluke, ну..., и что это значит ? |
| Автор: Amphiluke 15.7.2010, 20:44 |
| Ничего. Я по вашим словам сначала понял, что stepObj — это непосредственно сам документ XML. Однако свойство ownerDocument таких объектов (Document) равно null. Если бы это было так, то происхождение ошибки при вызове transformToFragment сразу стало бы очевидным. А так... все в порядке. |
| Автор: t77 15.7.2010, 21:13 | ||||||||||||
| У меня такое ощущение, что где то я запорол в синтаксисе а где не могу понять. Исходя из того, что код для IE работает, думаю по строчке разобрать его и перенести его в код для FF. Первый этап это загрузка xml в объект код для IE:
код для FF:
Второй этап создание объекта xsl и загрузка xsl код для IE:
код для FF:
Третий этап добавляем параметры и трансформация код для IE:
код для FF:
Что то мне не очень нравятся первые два этапа... Посмотрите пожалуйста, все ли сделано правильно для FF. Имеются ли альтернативные методы для реализации первых двух этапов?? |
| Автор: Amphiluke 15.7.2010, 21:35 | ||
t77, что-то вы меня запутали. Какой код вы реально используете для создания xmldoc? Тот, который вы привели сейчас, я написал в предположении внедренного ХML. Вы сказали, что это не так, поэтому использовать этот код надо с осторожностью. Вы рискуете потерять documentElement. Ведь у вас изначально был код
Сейчас вы его выбросили? По поводу этапов два и три, уже проверял. У меня работает нормально. |
| Автор: t77 15.7.2010, 23:20 | ||||
| Я сам немного запутался Вы правы изначально я использовал в первом этапе код:
Затем, после разных попыток оставил, предложенный вами вариант:
Как вы думаете, что правильней использовать и почему? И еще, скажите пожалуйста вас не смущает во втором и третьем этапах создание и загрузка xsltProcessor-а ? Как видно из примеров для кода IE сначала загружается xsl и лишь на третьем этапе создается xsltProcessor, для добавления параметров. А для кода FF, немного другая последовательность действий. Как вы думаете, может проблема именно в этом ?? |
| Автор: t77 19.7.2010, 22:46 |
| Проблема решена! Тема закрыта. |