使用JAXB处理设计不良的XML

使用JAXB处理设计不良的XML,第1张

使用JAXB处理设计不良的XML

如果要

s#
作为集合处理这些项目:

import java.io.Serializable;import java.util.List;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="xx")public class XMLXx implements Serializable {    private static final long serialVersionUID = 4064597372833234503L;    private List<XMLSite> sites;    @XmlElement(name="s")    public List<XMLSite> getSites() {        return sites;    }    public void setSites(List<XMLSite> sites) {        this.sites = sites;    }}

然后,你可以不喜欢愚弄JAXB以为所有元素(

s1
s2
等)实际上是被称为
s

import java.io.FileInputStream;import javax.xml.bind.JAXBContext;import javax.xml.bind.Unmarshaller;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLStreamReader;import javax.xml.stream.util.StreamReaderDelegate;public class Demo {    public static void main(String[] args) throws Exception {        JAXBContext jc = JAXBContext.newInstance(XMLXx.class);        XMLInputFactory xif = XMLInputFactory.newInstance();        XMLStreamReader xsr = xif.createXMLStreamReader(new FileInputStream("input.xml"));        xsr = new SiteStreamReaderDelegate(xsr);        Unmarshaller unmarshaller = jc.createUnmarshaller();        XMLXx object = (XMLXx) unmarshaller.unmarshal(xsr);        System.out.println(object.getSites().size());    }    private static class SiteStreamReaderDelegate extends StreamReaderDelegate {        public SiteStreamReaderDelegate(XMLStreamReader xsr) { super(xsr);        }        @Override        public String getLocalName() { String localName = super.getLocalName(); if(localName.startsWith("s")) {     return "s"; } return localName;        }    }}

有关类似的示例,请参见

  • http://bdoughan.blogspot.com/2010/12/case-insensitive-unmarshalling.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5134975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存