请教JAXBContext xml to bean xml标签beanstring 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 @XmlRootElement(name = "order-")这个东西 在order里设置就行了。 你好,这样的话标签名都是order-,现在他的xml里面比如list有5个值,他的标签则是order-1,order-2,order-3,order-4,order-5,不是固定的 主要想问的是那个list转成xml的时候,那个1,2,3,4,5怎么出来。 JAXB的注解无法解决这个问题,楼主只有自己在JAXB的marshall上做处理可以利用marshal(Object jaxbElement, ContentHandler handler) 在编组时候使用SAX方式的编组,不过那样要自己写入到xml文档了 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); <%@ taglib prefix="s" uri="/struts-tags"%> 报错 [牛逼]Java 使用if(false)竟然走进去了!,求解这是什么情况有图! 系统运行过程中,发现未登录,提示登录,登录后参数传递问题 求一部JAVA神作 急啊,在线,高手指点 java.sql.SQLException: Already closed 如何配置tomcat6.0(在线) spring+hibernate简单问题 高分求解? 如何把Document里面的内容输出到一个String对象里面。 hibernate的问题 获取父页面对象 MAVEN问题
你好,这样的话标签名都是order-,现在他的xml里面比如list有5个值,他的标签则是order-1,order-2,order-3,order-4,order-5,不是固定的
主要想问的是那个list转成xml的时候,那个1,2,3,4,5怎么出来。
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);