为何Pandoc解析HTML时会跳过video标签?
Pandoc解析HTML时
问题复现
$ echo '<video><source src="filename.mp4" type="video/mp4"></video>' \ | pandoc -f html -t html # 输出为空
问题现象
移除-f html参数后,Pandoc可正常传递并格式化输入,但业务需求需要让Pandoc解析内容并入文档树,以识别样式等信息。在线测试时得到以下提示:
<video controls><source src="filename.mp4" type="video/mp4"></video> --- > Skipped '<video controls>' at input line 1 column 1 > Skipped '<source src="filename.mp4" type="video/mp4">' at input line 1 column 17 > Skipped '</video>' at input line 1 column 61 # 输出为空
已尝试的无效方案
- 将video标签放入段落等容器中,标签仍消失
- 使用
--self-contained、--embed-resources参数,无效果 - 最终命令携带
--standalone参数,与问题无关
核心原因
Pandoc的HTML解析器默认仅识别其文档模型支持的结构化文本元素(如段落、标题、列表、图片等),<video>这类富媒体标签不在默认支持列表内,会被判定为“未知元素”直接跳过。
解决方法
方法1:使用--html-q-tags参数
该参数会让Pandoc保留所有无法识别的HTML标签,将其作为原始HTML块保留在输出中,同时正常解析其他支持的元素:
$ echo '<video><source src="filename.mp4" type="video/mp4"></video>' \ | pandoc -f html --html-q-tags -t html
方法2:自定义Lua过滤器实现精细控制
如果需要修改标签属性、整合进文档树等个性化处理,可编写Lua过滤器:
function RawBlock (raw) if raw.format == "html" and raw.text:match("<video") then -- 示例:自动添加controls属性 local modified = raw.text:gsub("<video", "<video controls") return RawBlock("html", modified) end return raw end
使用方式:
$ echo '<video><source src="filename.mp4" type="video/mp4"></video>' \ | pandoc -f html -t html --lua-filter=video-filter.lua
内容的提问来源于stack exchange,提问作者user203864
相关产品推荐
相关产品推荐

