解决方案 »

  1.   

     @XmlRootElement(name = "order-")这个东西 在order里设置就行了。
      

  2.   


    你好,这样的话标签名都是order-,现在他的xml里面比如list有5个值,他的标签则是order-1,order-2,order-3,order-4,order-5,不是固定的
      

  3.   


    主要想问的是那个list转成xml的时候,那个1,2,3,4,5怎么出来。
      

  4.   

    JAXB的注解无法解决这个问题,楼主只有自己在JAXB的marshall上做处理可以利用marshal(Object jaxbElement, ContentHandler handler) 在编组时候使用SAX方式的编组,不过那样要自己写入到xml文档了
      

  5.   

    javaBean代码以及ContentHandler实现代码import java.util.List;import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "orders")
    @XmlAccessorType(XmlAccessType.PROPERTY)
    public class Orders {
    private List<Order> list; @XmlElementWrapper(name = "record", required = true)
    @XmlElement(name = "order-")
    public List<Order> getList() {
    return list;
    } public void setList(List<Order> list) {
    this.list = list;
    }}
    @XmlAccessorType(XmlAccessType.PROPERTY)
    class Order {
    private String name; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
    }
    class MyContentHandler implements ContentHandler{
    private PrintWriter writer;//用于写入到传入的file
    private int orderIndex=1;//记录order-循环了几个了第一个下标为1

    public MyContentHandler(File file) throws Exception{
    writer=new PrintWriter(file);
    } @Override
    public void setDocumentLocator(Locator locator) {

    } @Override
    public void startDocument() throws SAXException {
    //文档开始输出xml声明
    writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\">");
    } @Override
    public void endDocument() throws SAXException {
    //文档结束后关闭流
    writer.flush();
    writer.close();
    } @Override
    public void startPrefixMapping(String prefix, String uri)
    throws SAXException {

    } @Override
    public void endPrefixMapping(String prefix) throws SAXException {

    } @Override
    public void startElement(String uri, String localName, String qName,
    Attributes atts) throws SAXException {
    if(localName.equals("order-"))//当碰到order-时加入下标
    writer.println("<"+localName+orderIndex+">");
    else
    writer.println("<"+localName+">");
    } @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    if(localName.equals("order-")){//当写完一个order-元素下标++
    writer.println("</"+localName+orderIndex+">");
    orderIndex++;
    }
    else
    writer.println("</"+localName+">");
    } @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    writer.println(new String(ch,start,length));
    } @Override
    public void ignorableWhitespace(char[] ch, int start, int length)
    throws SAXException {
    } @Override
    public void processingInstruction(String target, String data)
    throws SAXException {

    } @Override
    public void skippedEntity(String name) throws SAXException {

    }

    }//测试代码                JAXBContext context=JAXBContext.newInstance(Orders.class);
    Marshaller marshaller=context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    Orders orders=new Orders();
    List<Order> list=new ArrayList<Order>();
    Order order=new Order();
    order.setName("order1");
    list.add(order);
    order=new Order();
    order.setName("order2");
    list.add(order);
    order=new Order();
    order.setName("order3");
    list.add(order);
    order=new Order();
    order.setName("order4");
    list.add(order);
    order=new Order();
    order.setName("order5");
    list.add(order);
    orders.setList(list);
    Result saxResult=new SAXResult(new MyContentHandler(new File("orders.xml")));
    marshaller.marshal(orders, saxResult);