Jaxb解析XML转换为JavaBean忽略命名空间
发布时间:2020-12-16 08:28:47 所属栏目:百科 来源:网络整理
导读:/** * 解析xml(忽略命名空间) * * @param cla * @param content * @return * @throws JAXBException * @throws ParserConfigurationException * @throws SAXException */public static Object unmarshall(Class? cla,String content) throws JAXBException
/** * 解析xml(忽略命名空间) * * @param cla * @param content * @return * @throws JAXBException * @throws ParserConfigurationException * @throws SAXException */ public static Object unmarshall(Class<?> cla,String content) throws JAXBException,ParserConfigurationException,SAXException { JAXBContext jaxbContext = JAXBContext.newInstance(cla); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(content); SAXParserFactory sax = SAXParserFactory.newInstance(); sax.setNamespaceAware(false); XMLReader xmlReader = sax.newSAXParser().getXMLReader(); Source source = new SAXSource(xmlReader,new InputSource(reader)); Object o = unmarshaller.unmarshal(source); return o; } 先贴上代码 由于各种原因,很多特殊行业的自定义标准命名空间的URL访问不了,从而导致了Jaxb在将XML内容转换成JavaBean的时候,获取命名错误,而无法解析成功! 另一种情况,在XML中的节点属性中出现xsi:type、xml:lang等属性性,要求需要节点对应的对象要与设置的类型进行匹配,原本这是严格匹配XML节点格式的行为,是不错的方式;但在实际的操作中,这大大增加了数据模型,尤其是超大型数据模型的制作复杂程序,希望可以仅将节点与JavaBean进行匹配,相应的数据能填充到数据模型中就好 设置 SAXParserFactory.setNamespaceAware(false); 即可在转换时,忽略命名空间读取,忽略类型检查,完成数据转换 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |