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

如何将Autodesk Inventor XML材料库转CSV并映射ID与%占位符

将Autodesk Inventor XML材料库转换为结构化CSV的方法

要完成XML到CSV的转换,核心是先建立占位符与实际文本的映射,再替换主文件中的占位符,最终生成结构化表格。以下是具体步骤:

1. 解析资源文件,构建占位符映射字典

Mat.SI.res.xml是专门存储占位符对应文本的资源文件,里面的<string>标签定义了%xxx%格式占位符与实际含义的映射。我们需要先读取这个文件,把映射关系存入字典:

import xml.etree.ElementTree as ET

# 解析资源映射文件
res_tree = ET.parse('Mat.SI.res.xml')
res_root = res_tree.getroot()

# 构建占位符->实际文本的映射字典
placeholder_map = {}
for string_item in res_root.findall('string'):
    placeholder = string_item.attrib['id']
    actual_text = string_item.attrib['value']
    placeholder_map[placeholder] = actual_text

2. 解析主XML文件,提取并替换数据

Mat.SI.xml包含材料库的结构定义和实际数据:

  • <Columns>节点定义了CSV的表头(用Description属性的占位符对应实际列名)
  • <Data>下的<Row>节点是每一行的材料数据

提取表头

遍历<Columns>下的每个列节点,用映射字典替换Description里的占位符,得到CSV的表头:

# 解析主材料库文件
main_tree = ET.parse('Mat.SI.xml')
main_root = main_tree.getroot()

# 获取表头(使用Description属性的替换值)
columns = main_root.find('.//Columns')
csv_headers = []
for col in columns:
    # 替换Description中的占位符,作为列名
    desc_placeholder = col.attrib.get('Description', '')
    header_name = placeholder_map.get(desc_placeholder, desc_placeholder)
    csv_headers.append(header_name)

提取并替换数据行

遍历<Data>下的每个<Row>,替换每个字段中的占位符,保留数值类数据:

# 获取所有数据行
data_rows = []
rows = main_root.findall('.//Data/Row')
for row in rows:
    csv_row = []
    for col in columns:
        col_tag = col.tag
        # 获取当前列的文本内容
        cell_text = row.find(col_tag).text if row.find(col_tag).text else ''
        # 如果是占位符,替换为实际文本;否则直接保留
        if cell_text in placeholder_map:
            csv_row.append(placeholder_map[cell_text])
        else:
            csv_row.append(cell_text)
    data_rows.append(csv_row)

3. 写入CSV文件

用Python内置的csv模块将表头和数据写入文件:

import csv

# 写入CSV文件
with open('materials_si.csv', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(csv_headers)
    writer.writerows(data_rows)

注意事项

  • 部分占位符(如%565%、%574%)未出现在提供的资源片段中,需完整解析整个Mat.SI.res.xml文件才能获取对应文本。
  • 主文件中的长ID(如D8894772B88F495093C43AF905AB6373)是内部标识,若不需要可在提取数据时过滤该列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:22:06