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

如何通过Unirest从Confluence页面的Excellentable提取数据?

提取Confluence Excellentable表格数据的解决方案

直接请求Confluence页面URL会返回渲染后的HTML内容,而非结构化的表格数据。要获取Excellentable中的数据,需要通过Confluence REST API获取页面的宏原始数据,再解析其中的表格JSON。

步骤1:调用Confluence Content API获取页面宏数据

使用Confluence的Get Content API,指定展开body.storage来获取页面包含宏定义的原始存储内容,而非前端渲染后的页面。

示例Unirest代码

// 替换为你的Confluence域名和目标页面ID
String confluenceDomain = "https://your-confluence-domain.com";
String targetPageId = "123456";
String apiEndpoint = confluenceDomain + "/rest/api/content/" + targetPageId + "?expand=body.storage";

HttpResponse<JsonNode> apiResponse = Unirest.get(apiEndpoint)
        .basicAuth(userId, userPw)
        .header("Accept", "application/json")
        .asJson();

步骤2:解析API响应,提取Excellentable宏的JSON数据

API返回的JSON中,body.storage.value字段是页面的存储HTML,其中包含Excellentable宏的定义。你可以用HTML解析库(如Jsoup)提取宏内的tableJson参数,该参数存储了表格的结构化数据。

解析示例(使用Jsoup)

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.fasterxml.jackson.databind.ObjectMapper;

// 从API响应中取出存储HTML
String storageHtml = apiResponse.getBody()
        .getObject()
        .getJSONObject("body")
        .getJSONObject("storage")
        .getString("value");

// 解析HTML找到Excellentable宏
Document doc = Jsoup.parse(storageHtml);
// Jsoup处理自定义命名空间标签,需转义
Elements excellentableMacros = doc.select("ac|structured-macro[ac:name=excellentable]");

for (Element macro : excellentableMacros) {
    // 提取tableJson参数内容
    Element tableJsonElement = macro.selectFirst("ac|parameter[ac:name=tableJson]");
    if (tableJsonElement != null) {
        String tableJsonString = tableJsonElement.text();
        
        // 将JSON字符串转为Java对象(需定义对应POJO)
        ObjectMapper objectMapper = new ObjectMapper();
        ExcellentableTable tableData = objectMapper.readValue(tableJsonString, ExcellentableTable.class);
        
        // 操作表格数据,比如遍历行
        for (Map<String, Object> row : tableData.getRows()) {
            // 处理每行数据
            System.out.println(row);
        }
    }
}

定义ExcellentableTable POJO(示例)

根据tableJson的实际结构,定义对应的Java类,示例结构如下:

import java.util.List;
import java.util.Map;

public class ExcellentableTable {
    private List<Map<String, Object>> rows;
    private List<Map<String, Object>> columns;
    // 其他字段根据实际JSON结构补充

    // Getter和Setter方法
    public List<Map<String, Object>> getRows() {
        return rows;
    }

    public void setRows(List<Map<String, Object>> rows) {
        this.rows = rows;
    }

    public List<Map<String, Object>> getColumns() {
        return columns;
    }

    public void setColumns(List<Map<String, Object>> columns) {
        this.columns = columns;
    }
}

注意事项

  • 确保你的Confluence账号拥有页面的读取权限,以及API访问权限。
  • 不同版本的Excellentable可能会调整宏参数名称,如果tableJson不存在,检查宏内的参数标签。
  • 如果不想引入Jsoup,也可以用正则表达式匹配tableJson的内容,但HTML解析库的可靠性更高。

内容的提问来源于stack exchange,提问作者이성우

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:45:25