XStream转xml如何去掉list的a标签

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;

import javax.xml.bind.annotation.XmlRootElement;
import java.util.Arrays;
import java.util.List;
public class ListStrTest2 {

    public static void main(String[] args) {
        Request request = new Request();
        request.setId(1L);
        request.setStreetLines(Arrays.asList("line1","line2"));


        System.out.println(request.toXmlString());
    }

    @Data
    @XmlRootElement()
    @XStreamAlias("Request")
    public static class Request {
        private Long Id;

        private List<String> StreetLines;

        public String toXmlString() {
            XStream xstream = new XStream();
            xstream.processAnnotations(Request.class);
            xstream.aliasSystemAttribute(null, "class");
            String s = xstream.toXML(this);
            return s;
        }
    }

}

打印结果是

<Request>
  <Id>1</Id>
  <StreetLines>
    <a>
      <string>line1</string>
      <string>line2</string>
    </a>
  </StreetLines>
</Request>

我想要的结果是

<Request>
  <Id>1</Id>
  <StreetLines>
      <string>line1</string>
      <string>line2</string>
  </StreetLines>
</Request>

不要a标签。
注意不用手动replace

Arrays.asList("line1","line2");生成的集合是java.util.Arrays中的静态内部类ArrayList,里边的元素存储在属性名为a的数组中,所以生成的xml有a标签。测试换用java.util.ArrayList正常,猜测对java.util.ArrayList做了处理。如果坚持要用java.util.Arrays$ArrayList可以添加xstream.addImplicitArray(Class.forName("java.util.Arrays$ArrayList"),"a");来达到效果。

写了个小例子,用dom4j来实现,先把string转成Document对象,然后拿到a和StreetLines的Element,从StreetLines里删除a,并且把a的子Element加入到StreetLines


        String xmlString = "<Request>\r\n"
                + "  <Id>1</Id>\r\n"
                + "  <StreetLines>\r\n"
                + "    <a>\r\n"
                + "      <string>line1</string>\r\n"
                + "      <string>line2</string>\r\n"
                + "    </a>\r\n"
                + "  </StreetLines>\r\n"
                + "</Request>\r\n"
                + " ";
        
        Document doc = null;
        try {
          doc = DocumentHelper.parseText(xmlString);
        } catch (DocumentException e) {
          e.printStackTrace();
        }
        Element root = doc.getRootElement();
        Element StreetLines = root.element("StreetLines");
        Element element_a = StreetLines.element("a");
        StreetLines.remove(element_a);
        StreetLines.setContent(element_a.elements());

        System.out.println(doc.asXML());