You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将cl-html5-parser解析的列表转回HTML?求可靠方案

HTML解析与序列化的格式兼容问题

我需要处理网页内容,流程为:将HTML转换为列表结构→对列表进行操作→再转回HTML。第一步我使用cl-html5-parser完成HTML解析,工具表现良好,但我原以为它自带转回HTML的功能,实际却没有。

我尝试搭配xmls库实现序列化,运行代码如下:

(xmls:write-xml ;take the parsed html and convert back to html
  (html5-parser:parse-html5 ;parse the html into a list
    (dex:get "https://example.com/") :dom :xmls) ;get the html
    (open "text2.txt") ; stream, required by xmls
)

执行后出现以下错误:

debugger invoked on a SB-KERNEL:CASE-FAILURE @B8012CA9EA in thread
#<THREAD tid=358582 "main thread" RUNNING {1200BE8143}>:
  ("html" (("lang" "en"))
   ("head" NIL ("title" NIL "Example Domain") ("meta" (# #))
    ("style" NIL
     "body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}"))
   ("body" NIL
    ("div" NIL ("h1" NIL "Example Domain")
     ("p" NIL
      "This domain is for use in documentation examples without needing permission. Avoid use in operations."
     ("p" NIL #))
    "
")) fell through ETYPECASE expression.
  Wanted one of (XMLS:NODE NUMBER SYMBOL STRING).

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(XMLS::GENERATE-XML ("html" (("lang" "en")) ("head" NIL ("title" NIL "Example Domain") ("meta" (("name" "viewport") ("content" "width=device-width, initial-scale=1"))) ("style" NIL "body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}")) ("body" NIL ("div" NIL ("h1" NIL "Example Domain") ("p" NIL "This domain is for use in documentation examples without needing permission. Avoid use in operations.") ("p" NIL ("a" # "Learn more"))) "
")) #<SB-SYS:FD-STREAM for "file /home/oliver/text2.txt" {12048BD593}> 0)
   source: (ETYPECASE E
             (NODE
              (PROGN
               (DOTIMES (I (* 2 #)) (WRITE-CHAR #\  S))
               (FORMAT S "<~A~@[ xmlns=\"~A\"~]" (NODE-NAME E) (NODE-NS E))
               (LOOP FOR A IN (NODE-ATTRS E)
                     DO (PROGN
                         (WRITE-CHAR #\  S)
                         (WRITE-STRING # S)
                         (WRITE-CHAR #\= S)
                         (WRITE-CHAR #\" S)
                         (WRITE-ESCAPED # S)
                         (WRITE-CHAR #\" S))))
              (IF (NULL (NODE-CHILDREN E))
                  (PROGN
                   (WRITE-STRING "/>" S)
                   (IF (> INDENT 0)
                       (WRITE-CHAR #\Newline S)))
                  (PROGN
                   (WRITE-CHAR #\> S)
                   (IF (> INDENT 0)
                       (WRITE-CHAR #\Newline S))
                   (MAPC #'(LAMBDA # #) (NODE-CHILDREN E))
                   (IF (> INDENT 0)
                       (PROGN #))
                   (FORMAT S "</~A>" (NODE-NAME E))
                   (IF (> INDENT 0)
                       (WRITE-CHAR #\Newline S)))))
             (NUMBER (GENERATE-XML (TRANSLATE-RAW-VALUE E) S INDENT))
             (SYMBOL (GENERATE-XML (TRANSLATE-RAW-VALUE E) S INDENT))
             (STRING
              (PROGN
               (IF (> INDENT 0)
                   (PROGN (DOTIMES # #)))
               (WRITE-ESCAPED E S)
               (IF (> INDENT 0)
                   (WRITE-CHAR #\Newline S)))))

经排查,xmls的列表格式与cl-html5-parser的输出格式不兼容。我想请教两个问题:

  • 这类HTML/XML转列表的格式是否有统一标准?
  • 能否推荐可靠的一站式工具(支持解析→操作→序列化全流程),或者提供相关实现指导?

内容的提问来源于stack exchange,提问作者Oliver Cox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.03 18:14:49