2009-11-18 2 views

ответ

1

Там, кажется, не быть явным образом сделать это, так как он не должен иметь значение для последующих процессоров XML.

Вы можете взглянуть на источник для класса PrettyPrintWriter, который, вероятно, является тем, что он использует.

1

Я решил проблему, используя небольшое обходное решение. В частности, XStream печатает теги с закрытием только для не примитивного объекта; поэтому я заменил все объекты String классом Generic под названием «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; 
    } 
} 

Таким образом, нулевые значения элемента будут напечатаны в формате XML в качестве selfclosing тегов (как я хочу)

После того как я написал пользовательский конвертер, чтобы избежать печати в XML тег для не пустых объектов.

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

0

вы можете использовать конвертер, а затем установите значение с помощью: writer.setValue ("");

так:

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"/>