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

如何使用PyEcore从EMF/XMI资源中获取UUID

如何使用PyEcore从EMF/XMI资源中获取UUID

看起来你前面的步骤都做对了——已经成功启用UUID支持并保存了带UUID的XMI文件,只是在获取UUID的时候找错了方式!

在PyEcore中,当你开启了use_uuid=True后,资源对象(也就是你的m_resource)会负责管理所有对象的UUID,而不是每个对象自身直接暴露一个可直接访问的属性(这也是为什么你用dir(obj)看不到相关属性,懒加载机制的影响)。

你需要调用资源的get_id()方法,把要查询的对象作为参数传进去,就能拿到对应的UUID了。修改你的循环代码如下:

from os import path as osp
from pathlib import Path
from pyecore.resources import URI

# 假设RESOURCES_PATH已经定义
xmi_path = osp.join(RESOURCES_PATH, 'models', 'my_model.xmi')
m_resource = resource_set.get_resource(URI(xmi_path))
m_resource.use_uuid = True

# 保存带UUID的资源到临时目录
m_resource.save(output=URI(osp.join(RESOURCES_PATH, 'models', 'temp', 'my_model_uuid_version.xmi')))

# 遍历并获取每个对象的UUID
for obj in m_resource.contents[0].eAllContents():
    obj_type = obj.eClass.name
    obj_uuid = m_resource.get_id(obj)  # 这行是关键!
    print(f"Object Type: {obj_type}, UUID: {obj_uuid}")

另外补充一个小知识点:如果之后你需要手动给某个对象设置自定义UUID,可以使用资源的set_id()方法,示例如下:

# 给指定对象设置UUID
m_resource.set_id(some_object, "my-custom-uuid-12345")

设置完成后保存资源,新的UUID就会写入到XMI文件中。

备注:内容来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:08:10