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

在Eclipse EMF序列化过程中转义>字符的最优方案咨询

解决EMF序列化时额外转义>字符的方案

EMF默认的XML/XMI序列化只会转义<、&、"等必要字符,要让文本字段中的>也被转义为&gt;,无需后处理的最简洁方式是自定义XML序列化器,覆盖其字符转义逻辑:

  • 第一步:继承EMF的XMLSerializer类,重写字符转义方法,添加对>的转义
import org.eclipse.emf.ecore.xmi.impl.XMLSerializerImpl;
import org.eclipse.emf.ecore.xmi.XMLResource;
import java.util.Map;

public class CustomXMLSerializer extends XMLSerializerImpl {
    public CustomXMLSerializer(XMLResource xmlResource, Map<?, ?> options) {
        super(xmlResource, options);
    }

    @Override
    protected String escape(char[] chars, int start, int length, boolean isAttribute) {
        // 先调用父类完成基础转义
        String escapedStr = super.escape(chars, start, length, isAttribute);
        // 额外将>替换为&gt;
        return escapedStr.replace(">", "&gt;");
    }
}
  • 第二步:自定义XMLResource,指定使用上述自定义序列化器
import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
import org.eclipse.emf.ecore.xmi.XMLSerializer;
import java.util.Map;
import org.eclipse.emf.common.util.URI;

public class CustomXMLResource extends XMLResourceImpl {
    public CustomXMLResource(URI uri) {
        super(uri);
    }

    @Override
    protected XMLSerializer createXMLSerializer(Map<?, ?> options) {
        return new CustomXMLSerializer(this, options);
    }
}
  • 第三步:注册自定义ResourceFactory,让EMF在序列化时使用这个资源类型
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.ResourceSetImpl;
import org.eclipse.emf.ecore.resource.Resource.Factory;
import org.eclipse.emf.ecore.xmi.XMLResource;
import java.net.URI;

// 初始化ResourceSet时注册自定义工厂
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
    .put(XMLResource.DEFAULT_EXTENSION, new Factory() {
        @Override
        public Resource createResource(URI uri) {
            return new CustomXMLResource(uri);
        }
    });

之后正常使用这个ResourceSet进行EObject的序列化,生成的文件中文本字段里的>就会被自动转义为&gt;,无需额外后处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:03:12