Skip to main content

parse_from_xml

Function parse_from_xml 

Source
pub fn parse_from_xml(xml: &str) -> Result<Chart>
Expand description

<c:chartSpace> XML 解析回 Chart 模型(TODO-004 读路径)。

Chart::to_xml 对称的解析函数,用于 Presentation::from_opc 阶段 读取 /ppt/charts/chartN.xml part 内容后还原 Chart 结构。

§解析策略

  • chart_type:根据 <c:plotArea> 下的图表元素名(c:barChart / c:lineChart / c:pieChart / c:scatterChart / c:areaChart / c:radarChart / c:bubbleChart) 判断;对 c:barChart 额外读取 <c:barDir val="col|bar"> 区分 Column / Bar。
  • title:从 <c:title><a:tx><a:rich>...<a:t>文本</a:t> 提取第一个文本节点。
  • categories:从第一个 <c:ser><c:cat><c:strRef><c:strCache> 提取类别标签 (所有系列共享同一类别轴,取第一个即可;散点图/气泡图无 c:cat,类别列表为空)。
  • series:遍历每个 <c:ser>,提取:
    • name<c:tx><c:strRef><c:strCache><c:pt><c:v>
    • values<c:val><c:numRef><c:numCache><c:pt><c:v>(Y 值)
    • x_values<c:xVal><c:numRef><c:numCache><c:pt><c:v>(仅散点图/气泡图)
    • bubble_sizes<c:bubbleSize><c:numRef><c:numCache><c:pt><c:v>(仅气泡图)

§容错

  • 缺失 <c:plotArea> 或其中无已知图表元素 → 返回 Column 占位类型(避免阻塞 round-trip);
  • 单个系列的 numCache/strCache 解析失败 → 该系列用空数据填充,不中断整体解析;
  • 不解析 <c:axId> / <c:catAx> / <c:valAx> / <c:legend> 等装饰元素 (写出时由 Chart::to_xml 按图表类型自动重建)。

§参数

  • xml:完整的 <c:chartSpace> XML 字符串(chartN.xml 内容)。

§返回值

  • 成功:返回 Chartrid 字段为空字符串(由调用方根据 slide rels 填充);
  • 失败:返回 Error::Xml,包含解析错误上下文。

§示例

let xml = std::fs::read_to_string("chart1.xml").unwrap();
let chart = Chart::parse_from_xml(&xml).expect("parse chart");
println!("type: {:?}, series: {}", chart.chart_type, chart.data.series.len());