HXT忽略HTML DTD,将其替换为XML DTD

时间:2014-11-05 17:53:45

标签: haskell doctype hxt

我在弄清楚为什么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

我为评论道歉 - 我一直在玩弄不同的配置组合。即使使用withSubstDTDEntities nowithValidate no等,我似乎也无法让HXT与混乱使用DTD。我收到警告说HXT忽略了我的doctype声明,但这是我唯一的洞察力。有人可以借给我一个手吗?提前谢谢!

1 个答案:

答案 0 :(得分:4)

你有两个问题

HXT只接受以下三种html doctypes之一

<!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