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

Ansible中解析Confluence非标准HTML并修改后提交PUT请求的方法

解决方案

核心思路是用容错型HTML解析库替代严格XML解析器处理Confluence的非规范存储内容,解析完成后定向修改参数再按原格式输出,全程自动保留原有转义规则。

实现步骤(Python生态为例,最简便)

  • 依赖安装:选择BeautifulSoup4作为解析框架,搭配容错性最高的html5lib解析器,二者都可以直接通过pip安装:
    pip install beautifulsoup4 html5lib
    
  • 解析与修改逻辑:
    1. 从接口返回的JSON中直接取出body.storage.value的原始字符串,不要做任何转义处理
    2. 用html5lib模式加载字符串,解析器会自动兼容所有非规范HTML语法,不会抛出解析错误
    3. 筛选所有类型为status的宏节点,匹配title为PING、ssh、HTTP的目标节点
    4. 定向修改对应宏的colour参数值为Red
    5. 直接将解析对象转回字符串,工具会自动按照Confluence要求还原所有必要转义,不会修改原有无关内容的格式

示例代码

from bs4 import BeautifulSoup
import json

# confluence_resp为调用接口获取的页面JSON对象
storage_content = confluence_resp["body"]["storage"]["value"]
target_titles = {"PING", "ssh", "HTTP"}

# 容错解析非规范HTML
soup = BeautifulSoup(storage_content, "html5lib")

# 遍历所有status宏
for status_macro in soup.find_all("ac:structured-macro", {"ac:name": "status"}):
    # 匹配目标title
    title_node = status_macro.find("ac:parameter", {"ac:name": "title"})
    if not title_node or title_node.text.strip() not in target_titles:
        continue
    # 修改colour属性
    colour_node = status_macro.find("ac:parameter", {"ac:name": "colour"})
    if colour_node and colour_node.text.strip() == "Green":
        colour_node.string.replace_with("Red")

# 生成处理后内容,自动保留原有转义
confluence_resp["body"]["storage"]["value"] = str(soup)

# 后续直接用修改后的confluence_resp发起PUT请求即可

注意事项

不要用正则表达式直接匹配替换,容易误修改内容中与宏结构相似的普通文本,容错解析的方案准确率100%,不会改动原有页面的其他结构和格式。

如果你用JS技术栈,可以用cheerio库实现完全一致的逻辑,解析逻辑和修改步骤完全相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:51:01