使用JAXB从XMLstring创build对象

如何使用下面的代码将一个XMLstring映射到下面的JAXB对象?

JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Person person = (Person) unmarshaller.unmarshal("xml string here"); 

 @XmlRootElement(name = "Person") public class Person { @XmlElement(name = "First-Name") String firstName; @XmlElement(name = "Last-Name") String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } } 

4 Solutions collect form web for “使用JAXB从XMLstring创build对象”

要传递XML内容,您需要将内容包装在Reader ,然后取消编组:

 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader("xml string here"); Person person = (Person) unmarshaller.unmarshal(reader); 

或者如果你想要一个简单的一行:

 Person person = JAXB.unmarshal(new StringReader("<?xml ..."), Person.class); 

没有unmarshal(String)方法。 你应该使用一个Reader

 Person person = (Person) unmarshaller.unmarshal(new StringReader("xml string")); 

但是通常你从某个地方得到这个string,例如一个文件。 如果是这样的话,最好通过FileReader本身。

如果你已经有了xml,并且有多个属性,你可以像下面这样处理它:

 String output = "<ciudads><ciudad><idCiudad>1</idCiudad> <nomCiudad>BOGOTA</nomCiudad></ciudad><ciudad><idCiudad>6</idCiudad> <nomCiudad>Pereira</nomCiudad></ciudads>"; DocumentBuilder db = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(output)); Document doc = db.parse(is); NodeList nodes = ((org.w3c.dom.Document) doc) .getElementsByTagName("ciudad"); for (int i = 0; i < nodes.getLength(); i++) { Ciudad ciudad = new Ciudad(); Element element = (Element) nodes.item(i); NodeList name = element.getElementsByTagName("idCiudad"); Element element2 = (Element) name.item(0); ciudad.setIdCiudad(Integer .valueOf(getCharacterDataFromElement(element2))); NodeList title = element.getElementsByTagName("nomCiudad"); element2 = (Element) title.item(0); ciudad.setNombre(getCharacterDataFromElement(element2)); ciudades.getPartnerAccount().add(ciudad); } } for (Ciudad ciudad1 : ciudades.getPartnerAccount()) { System.out.println(ciudad1.getIdCiudad()); System.out.println(ciudad1.getNombre()); } 

getCharacterDataFromElement方法是

 public static String getCharacterDataFromElement(Element e) { Node child = e.getFirstChild(); if (child instanceof CharacterData) { CharacterData cd = (CharacterData) child; return cd.getData(); } return ""; } 
  • jQuery xml错误'没有'Access-Control-Allow-Origin'标题出现在请求的资源上。
  • 如何parsingSOAP XML?
  • Eclipse如何使XML文件始终在文本编辑器而不是XML编辑器中打开
  • 如何parsingXML文件?
  • 使用HTTP POST和PHP发送XML数据
  • 应用程序的AndroidManifest.xml中所需的元数据标记不存在。
  • Jaxb,Class有两个同名的属性
  • Javaconfiguration框架
  • 为什么在.NET中没有XML序列化字典?
  • 从XML节点java生成/获取xpath
  • @XMLRootElement与@XmlType