XSLT на стороне клиента с JavaScript в Firefox - PullRequest
3 голосов
/ 27 июня 2009

Я использую xslt на стороне клиента для преобразования xml-файлов в xhtml. Были некоторые препятствия, но мне удалось обойти их все, кроме этого.

Проблема в том, что когда у меня есть простой XML-файл, подобный этому

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="./jsInFf.xsl"?>
<root>hello</root>

и преобразовать его в xhtml с помощью простого xsl, подобного этому

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="xml"
  version="1.0"
  encoding="ISO-8859-1"
  indent="yes"
  omit-xml-declaration="no"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title>a title</title>
        <script type="text/javascript">
          alert(document);
          alert(document.anchors);
    </script>
      </head>
      <body>
        <xsl:value-of select="." /> world
      </body>
    </html>
  </xsl:template>    
</xsl:stylesheet>

первое оповещение всплывет как «[object XMLDocument]» с firefox вместо «[object]», как это делается для IE и safari. Из того, что я понял, это означает, что Firefox не создает HTML-документ javascript (или html dom, не уверен, что это за формулировка). Второе предупреждение в Firefox будет «неопределенным», но в IE и Safari это «[объект].

Так что в firefox нет document.forms или document.anchors и т. Д. Я знаю, что некоторые javascript все еще будут работать, например, document.getElementById, но я боюсь, что более продвинутые вещи, такие как ajax, не будут работать должным образом, если document.forms и подобное не существует.

Есть ли обходной путь для этого? В моем текущем проекте я переписываю кучу страниц для использования xslt. Уже написано много javascipt, и изменение всего этого, чтобы использовать ограниченный javascript firefox, на самом деле не вариант, если это вообще возможно.

Большое спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 27 июня 2009

1) Исправление вашей проблемы

Решить вашу проблему так же просто, как изменить значение атрибута @ method с «xml» на «html» в xsl: output element.

2) Объясняя разницу

HTML DOM расширяет основные интерфейсы XML DOM. Так, например, коллекция «форм» отсутствует в XMLDocument, но находится в HTMLDocument

0 голосов
/ 29 июня 2009

Причина, по которой я использовал xml, заключалась в том, что я хотел использовать xhtml для вывода. Так как я делаю преобразования на стороне клиента, я ограничен xslt 1.0 и xhtml не вариант. Я видел на нескольких сайтах, что для вывода xhtml нужно выбрать xml и использовать omit-xml-объявление. Я предполагаю, что именно это заставило firefox создать XML-DOM.

Следуя совету Сергея, я изменил свой метод вывода, и все, кажется, работает. Вот как это выглядит сейчас

  <xsl:output method="html"
  encoding="ISO-8859-1"
  indent="yes"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

Я проверил тип документа в IE. Он по-прежнему говорит, что это XHTML, хотя метод HTML. Я не знаю, почему так много сайтов предлагают взломать метод вывода XML ...

Спасибо, что объяснили разницу с DOM xml и html. Из любопытства, есть ли способ вручную создать html dom из xml dom?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...