xml – 使用JAXB进行部分解组

前端之家收集整理的这篇文章主要介绍了xml – 使用JAXB进行部分解组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想部分解组大 XML.

XML具有以下结构:

@H_404_3@<Records> <Contract> ... </Contract> <Contract> ... </Contract> ... <Contract> ... </Contract> <Contract> ... </Contract> </Records>

使用XJC生成结果类:

@H_404_3@- Records |- Contract

如果我按照these(来自jaxb-ri的样本),我得到错误

@H_404_3@Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://somedomain.com",local:"Contract"). Expected elements are <{http://somedomain.com}Records>

如果我使用:

@H_404_3@<jaxb:globalBindings localScoping="toplevel"/>

我收到错误

@H_404_3@org.xml.sax.SAXParseException: A class/interface with the same name "com.my.package.Text" is already in use. Use a class customization to resolve this conflict.

但我需要改变很多课程.这不是解决方案.

@H_404_3@/** * User: r.ibragimov * Date: 04.06.13 */ public class PartialJAXB1 { public static void main(String[] args) throws JAXBException,XMLStreamException,FileNotFoundException { final QName qName = new QName("http://www.domain.com","Contract"); InputStream inputStream = new FileInputStream(new File("c:\\test.xml")); // create xml event reader for input stream XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(inputStream); // initialize jaxb JAXBContext context = JAXBContext.newInstance(Records.class); Unmarshaller unmarshaller = context.createUnmarshaller(); XMLEvent e = null; // loop though the xml stream while( (e = xmlEventReader.peek()) != null ) { // check the event is a Document start element if(e.isStartElement() && ((StartElement)e).getName().equals(qName)) { // unmarshall the document Records.Contract contract = unmarshaller.unmarshal(xmlEventReader,Records.Contract.class).getValue(); System.out.println(contract); } else { xmlEventReader.next(); } } } }

猜你在找的XML相关文章