将带有HTML的Markdown文件转换为纯Markdown
in.md
# Title
## Subtitle
### Sub-subtitle
<span><div>Line before image</div><div><br></div><div><img src="img.png" width=404 height=255><br></div><div><br></div><div>Line after image</div><div><br></div><div>Text</div></span><h1><span>Heading 1</span></h1><span><div>Text</div><div><br></div></span><h2><span>Heading 2</span></h2><span><div>Text</div></span><h3><span>Heading 3</span></h3><div><span>Text</span></div><div><span><br></span></div><span><div>Line before code</div><code><pre><code><div>Code line 1</div><div>Code line 2</div><div>Code line 3</div></code></pre></code><div><span style="">Line after code</span><br></div><div><span style=""><br></span></div><div><span style=""><a href="http://pandoc.org">Link</a></span></div><div><span style=""><br></span></div><div><ul><li>Unordered bullet 1<br></li><li>Unordered bullet 2<br></li></ul></div><div><span style=""><br></span></div><div><ol><li>Ordered bullet 1<br></li><li>Ordered bullet 2<br></li></ol></div><div><span style=""><br></span></div></span><blockquote style="margin:0 0 0 40px;border:none;padding:0px;"><span><div><span style="">Quote line 1</span></div></span><span><div><span style="">Quote line 2</span></div></span></blockquote><span><div><span style=""><br></span></div><div><span style="">Text</span></div><div><span style=""><br></span></div><div><i>Italic</i></div><div><i><br></i></div><div>Text</div><div></div></span>
Markdown text
More Markdown text
我尝试了许多Pandoc脚本:
pandoc -f markdown -t markdown_strict --atx-headers in.md -o out.md
添加了换行符
无转换
<h3>
<span>H3</span>
</h3>
<span>txt</span>
<span><br></span>
和
<ul>
<li>
bullet<br>
</li>
<li>
list<br>
</li>
</ul>
第二次对结果运行转换命令无济于事。
pandoc -f markdown -t markdown_strict-native_divs-native_spans --atx-headers in.md -o out.md
与上述相同
pandoc -f markdown-markdown_in_html_blocks -t markdown_strict-native_divs-native_spans --atx-headers in.md -o out.md
与上面相同,换行符更少
pandoc -f markdown -t markdown_strict-native_divs-native_spans-raw_html --atx-headers in.md -o out.md
所有HTML元素均被删除,但未应用Markdown:
Heading 1
Text
Heading 2
Text
Heading 3
Text
和
Unordered bullet 1
Unordered bullet 2
Unordered bullet 3
我无法调整最初生成in.md
的方式。
Pandoc不必成为解决方案的一部分。但是,使用Pandoc似乎很有意义,因为(1)转换需要由Azure DevOps发布管道执行,并且运行一个简单命令非常适合该工作流程,并且(2)所需结果只是一个干净的Markdown文件。 / p>
我可以使用Regex编写解决方案的脚本(如果没有其他解决方案的话,也可以这样做),但是如果Pandoc命令(或其他解决方案)完成了该解决方案,那么似乎不太容易出现人为错误。
谢谢您的任何想法或建议。
答案 0 :(得分:4)
我的建议是先将整个文档转换为HTML,然后将结果转换为所需的Markdown格式:
pandoc --from=markdown --to=html in.md | \
pandoc --from=html --to=markdown-raw_html-native_divs --output out.md
请注意,输入内容似乎包含无效的HTML(例如,根据HTML标准,div
或span
元素中不得出现code
),因此嵌入式HTML并不完全明白它的意思。
还会注意到一些仅包含换行符的跨度,这会使输出看起来很丑陋。最好的解决方案是通过pandoc filter删除它们。