HXT игнорирует HTML DTD, заменяя его XML DTD

У меня возникли проблемы с выяснением, почему HXT заменяет мои DTD. Во-первых, вот мой входной файл для анализа:

<!DOCTYPE html>
<html>
  <head>
    <title>foo</title>
  </head>
  <body>
    <h1>foo</h1>
  </body>
</html>

и это вывод, который я получаю:

<?xml version="1.0" encoding="US-ASCII"?>
<html>
  <head>
    <title>foo</title>
  </head>
  <body>
    <h1>foo</h1>
  </body>
</html>

Наконец, вот упрощенная версия стрелок, которые я использую:

start (App src dest) = runX $
                         readDocument [ withValidate no
                                      , withSubstDTDEntities no
                                      , withParseHTML yes
                                      --, withTagSoup
                                      ]
                                      src
                         >>>
                         this
                         >>>
                         writeDocument [ withIndent yes
                                       , withSubstDTDEntities no
                                       , withOutputHTML
                                       --, withOutputEncoding "UTF-8"
                                       ]
                                       dest

Прошу прощения за комментарии - я играл с разными комбинациями конфигов. Я просто не могу заставить HXT не связываться с DTD, даже с withSubstDTDEntities no, withValidate noи т.д. Я получаю предупреждение о том, что HXT игнорирует мою декларацию типа документа, но это единственное понимание, которое у меня есть. Может кто-нибудь, пожалуйста, протяните мне руку? Заранее спасибо!

1 ответ

Решение

У вас две проблемы

HXT принимает только один из следующих трех типов документов html

<!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
 "DTD/xhtml1-strict.dtd">

<!DOCTYPE html
 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "DTD/xhtml1-transitional.dtd">

<!DOCTYPE html
 PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
 "DTD/xhtml1-frameset.dtd">

Использование одного из них избавит от предупреждения о игнорировании dtd.

Во-вторых, добавьте следующую опцию в writeDocument

withAddDefaultDTD yes
Другие вопросы по тегам