如何移除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
相关产品推荐
相关产品推荐

