haskell – 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忽略了我的doctype声明,但这是我唯一的洞察力.有人可以借给我一个手吗?先感谢您!

最佳答案
你有两个问题

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

转载注明原文:haskell – HXT忽略HTML DTD,用XML DTD替换它 - 代码日志