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

如何在.NET中将HTML文本转换为JIRA兼容的格式化文本?

.NET 端HTML转JIRA Wiki格式实现方案

别用字符串查找替换硬做,碰到嵌套列表、多层标签嵌套的场景根本兜不住,基于HTML DOM解析做结构化转换才是稳定方案,具体落地方式如下:

  • 依赖选择
    直接通过NuGet安装AngleSharp库即可,无额外依赖,兼容所有.NET版本(.NET Framework、.NET Core/.NET 5+都支持),对前端编辑器输出的不规范富文本HTML容错性很好,适合这类转换场景。
  • 核心实现逻辑
    按照深度优先的顺序遍历解析后的DOM节点,按节点类型映射对应JIRA Wiki标记,重点处理列表的层级缩进逻辑:
    • 行内标签映射(直接替换对应包裹标记即可):
      • <strong>、<b>标签包裹的内容,外层套*,对应JIRA加粗格式
      • <em>、<i>标签包裹的内容,外层套_,对应斜体格式
      • 行内<code>标签内容外层套{{和}},对应行内代码格式
      • <del>、<s>标签内容外层套-,对应删除线格式
      • <a>标签转成[链接文本|链接地址]格式
      • <pre>包裹的代码块,外层用{code:代码语言}和{code}包裹,对应JIRA代码块
    • 块级标签映射:
      • <h1>到<h6>标签,分别在内容开头加h1. 到h6. 前缀,对应JIRA标题层级
      • <p>标签保留内部转换后的内容,段落之间空一行分隔
      • <br/>标签直接转成单个换行
    • 列表标签特殊处理(简单替换失效的核心场景):
      遍历<ul>、<ol>节点时额外记录当前列表的嵌套深度,每嵌套一层就增加2个空格的缩进:
      • 无序列表<ul>下的直接<li>子节点,按当前缩进量在开头加* ,比如一级列表项是* 列表内容,二级嵌套的无序列表项开头加2个空格再写*
      • 有序列表<ol>下的直接<li>子节点,按缩进量在开头加# ,嵌套缩进规则和无序列表一致
      • 如果<li>内部还嵌套了子列表,递归处理子列表节点时自动把层级计数+1,就能自动生成正确缩进的列表标记,完全不需要写复杂正则匹配开闭标签,不会出现列表层级错乱的问题
  • 落地优化
    所有节点遍历完成后,统一做一次后处理:把连续3个以上的空行压缩成1个空行,去掉每行首尾的多余空白,避免生成的内容在JIRA里渲染出多余空行。如果你的编辑器有自定义特殊标签,只需要在节点遍历的分支判断里加对应映射规则就行,扩展成本很低。
  • 避坑提示
    不要尝试用正则表达式做全量HTML转换,HTML本身是结构化树形结构,正则没法正确处理任意层级的标签嵌套,尤其是多层嵌套列表、块级标签套行内标签的场景,很容易出现标记错位、格式错乱的问题,基于DOM遍历的方案稳定性要高几个量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:09:37