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

OpenXML SDK 2.0迁移至3.0:RelationshipErrorHandler替代方案咨询

OpenXML SDK 3.0迁移:替换RelationshipErrorHandlerFactory的实现方法

我正在从OpenXML SDK 2.0迁移至3.0版本,官方更新日志提到:

已移除OpenXmlSettings.RelationshipErrorHandlerFactory及相关类型,替换为内置机制实现该功能

原有代码如下:

OpenSettings openSettings = new OpenSettings()
{
    RelationshipErrorHandlerFactory = RelationshipErrorHandler.CreateRewriterFactory(Rewriter)
};

private static string Rewriter(Uri partUri, string id, string uri)
    => $"http://unknown?id={id}";

改写方案

在SDK 3.0中,你可以通过两种方式实现原代码的链接重写逻辑:

方式1:利用RelationshipChanging事件

在打开文档时订阅OpenXmlPackage的RelationshipChanging事件,在事件处理中直接修改关系的目标地址:

using (var package = WordprocessingDocument.Open("你的文档路径.docx", new OpenSettings()))
{
    package.RelationshipChanging += (sender, args) =>
    {
        if (args.Relationship.TargetMode == TargetMode.External)
        {
            args.Relationship.Target = $"http://unknown?id={args.Relationship.Id}";
        }
    };

    // 执行你的文档操作逻辑
}

方式2:加载文档后遍历修正关系

如果需要处理加载时已存在的错误外部关系,可以直接遍历包内的所有关系进行修正:

using (var package = WordprocessingDocument.Open("你的文档路径.docx", new OpenSettings()))
{
    // 以超链接关系为例,可根据实际需求修改关系类型
    var hyperlinkRelationships = package.Package.GetRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink");
    foreach (var rel in hyperlinkRelationships.ToList()) // ToList避免遍历中修改集合报错
    {
        if (rel.TargetMode == TargetMode.External)
        {
            package.Package.DeleteRelationship(rel.Id);
            package.Package.CreateRelationship(
                new Uri($"http://unknown?id={rel.Id}", UriKind.Absolute),
                TargetMode.External,
                rel.RelationshipType,
                rel.Id);
        }
    }

    // 执行你的文档操作逻辑
}

这两种方式都能实现原代码中对外部链接的重写效果,替代已移除的RelationshipErrorHandlerFactory功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:33:22