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

如何移除in.jlibs XSInstance生成XML中的虚拟值?

解决jlibs XSInstance生成XML时自动添加虚拟值的问题

我之前用jlibs的XSInstance做过类似需求,要生成仅含空标签的XML,核心就是自定义一个值生成器来替换默认的虚拟值填充逻辑,具体步骤如下:

  • 首先创建自定义的ValueGenerator实现,让它返回空字符串:

    import in.jlibs.xml.xsd.XSInstance;
    import in.jlibs.xml.xsd.impl.DefaultValueGenerator;
    
    public class EmptyValueGenerator extends DefaultValueGenerator {
        // 处理字符串类型元素,直接返回空字符串
        @Override
        public String generateValue(String namespace, String name, int minLength, int maxLength) {
            return "";
        }
    
        // 处理其他数据类型(如数字、日期),按需返回空值或对应类型的空表示
        @Override
        public Object generateValue(Class<?> type) {
            if (String.class.isAssignableFrom(type)) {
                return "";
            }
            // 非字符串类型如果需要空标签,可根据场景调整,比如数字返回0、日期返回null等
            return super.generateValue(type);
        }
    }
    
  • 然后在初始化XSInstance时替换默认生成器:

    XSInstance xsInstance = new XSInstance();
    // 应用自定义的空值生成器
    xsInstance.setValueGenerator(new EmptyValueGenerator());
    
    // 可选配置:如果需要生成所有可选元素的空标签(默认仅生成必填元素)
    xsInstance.setGenerateOptionalElements(true);
    
    // 正常加载XSD并生成XML
    Document xmlDoc = xsInstance.generate(xsdDocument, "Customer");
    

这样生成的XML就会是你想要的仅含空标签的结构,不会再出现Address1、Business_Unit1这类虚拟填充值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:47