代码之家  ›  专栏  ›  技术社区  ›  waterlooalex

使用XStream的自闭标签?

  •  2
  • waterlooalex  · 技术社区  · 16 年前

    有没有办法让XStream生成自闭元素?

    <foo/>
    

    <foo></foo>
    
    3 回复  |  直到 16 年前
        1
  •  1
  •   Jim Garrison    16 年前

    PrettyPrintWriter 类,这可能是它正在使用的。

        2
  •  1
  •   Matthias    14 年前

    特别是XStream只为非基元对象打印自闭标签;因此,我将所有String对象替换为一个名为“Element”的泛型类,该类只有一个属性“value”。

    public class Element {
        private String value;
        public Element() {
        }
        public Element(String value) {
            this.value = value;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }
    

    public class CustomElementConverter implements Converter
    {
        public boolean canConvert(Class type)
        {
            return type.equals(Element.class);
        }
        public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
            String element = ((Element)source).getValue();
            if (element != null) { 
                writer.setValue(element);
            }
        }
        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
            return null;
        }
    }
    

    我希望它对别人有用。

    Dom

        3
  •  0
  •   rdiegoc    10 年前

    这样地:

    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
        Ack ack = (Ack)source;
    
        writeBasicAck(writer, ack);
    
        writer.setValue("");
    }
    
    protected void writeBasicAck(HierarchicalStreamWriter writer, Ack ack) {
        writer.addAttribute("pos", String.valueOf(ack.getPos()));
        writer.addAttribute("ticket", String.valueOf(ack.getTicket()));
        writer.addAttribute("estado", String.valueOf(ack.getEstado()));
        writer.addAttribute("suc", String.valueOf(ack.getSucursal()));
    }
    

    这写:

    <ackticket pos="2" ticket="123" estado="0" suc="1235"></ackticket>
    

    而不是:

    <ackticket pos="2" ticket="123" estado="0" suc="1235"/>