Как конвертировать XML в объект класса?

 
 
 
Сообщения:5
Есть таблица в Mysql , в одном из столбцов типа Varchar хранится информация о пользователе в виде XML . Как конвертировать данный XML в обычный объект ?
public class Employee 
{
	private int id;

	private String firtsName;

	private String lastName;

	private String email;

	private String address;
	private int positionId;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getFirtsName() {
		return firtsName;
	}
	public void setFirtsName(String _firtsName) {
		this.firtsName = _firtsName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String _lastName) {
		this.lastName = _lastName;
	}
	public String getEmail() {
		return this.email;
	}
	public void setEmail(String info) {
		this.email = info;
	}
	public int getPositionId() {
		return this.positionId;
	}
	public void setPositionId(int positionId) {
		this.positionId = positionId;
	}
	public String getAddress() {
		return this.address;
	}
	public void setAddress(String _address) {
		this.address = _address;
	}
	public String toString()
	{
		return String.format("Id:"+this.id+"First name:"+this.firtsName+"Last name"+this.lastName);
	}
}


<Employee>
      <firstName>Colin</firstName>
      <lastName>Smith</lastName>
      <email>[email protected]</Email>
      <address>Chicago</Address>
  </Employee>

 
 
Сообщения:932
можно ручками или через регулярки.
можно через DOM. JDOM или встроенный явовский.
можно через XStream. библиотека с характером, ошибок не прощает, но переводит объекты в XML и обратно.
 
 
Сообщения:872
JAXB в помощь
 
 
Сообщения:268
gidravlic:
JAXB в помощь

+1

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:5
Происходит исключение.


public class EmployeeDAO 
{
	private Connection myCon;
	public static EmployeeDAO empDao;
	public EmployeeDAO()
	{
		try {
			myCon=DriverManager.getConnection("jdbc:mysql://localhost:3306/xml_test","root","");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public List<Employee> getAllEmployees() throws SQLException, JAXBException
	{
		List<Employee> list=new ArrayList<>();
		Statement statement=myCon.createStatement();
		ResultSet result=statement.executeQuery("SELECT * FROM employees");
		while(result.next())
		{
			Employee emp=convertXMLToEmployee(result);
			list.add(emp);
		}
		return list;
	}
	private Employee convertXMLToEmployee(ResultSet result) throws SQLException, JAXBException
	{
	 
		int id=result.getInt("id");
		String data=result.getString("data");
		int positionId=result.getInt("position_id");	
		StringReader sr = new StringReader(data);
		JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
		Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
		Employee employee = (Employee) unmarshaller.unmarshal(sr);
		employee.setId(id);
		employee.setPositionId(positionId);
		return employee;
	}
}



public class Program {

	public static void main(String[] args)
	{
		EmployeeDAO.empDao=new EmployeeDAO();
		List<Employee> list= new ArrayList<>();
		try {
			list=EmployeeDAO.empDao.getAllEmployees();
			for (Employee employee : list) 
			{
				System.out.println(employee);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JAXBException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


public class Program {

	public static void main(String[] args)
	{
		EmployeeDAO.empDao=new EmployeeDAO();
		List<Employee> list= new ArrayList<>();
		try {
			list=EmployeeDAO.empDao.getAllEmployees();
			for (Employee employee : list) 
			{
				System.out.println(employee);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JAXBException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
Изменен:20 апр 2018 15:56
 
 
Сообщения:872
Для того, чтобы использовать JAXB надо немного почитать документацию. Класс Employee и его поля должен быть аннотированы в соответствии с https://javaee.github.io/jaxb-v2/doc/user-guide/ch03.html
 
 
Сообщения:5
Проблема решилась без аннотации.
	private Employee convertXMLToEmployee(ResultSet result) throws SQLException, JAXBException
	{

		int id=result.getInt("id");
		String data=result.getString("data");
		int positionId=result.getInt("position_id");	
		StringReader sr = new StringReader(data);
		JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
		Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
		StreamSource source = new StreamSource(sr);
		JAXBElement<Employee> element = unmarshaller.unmarshal(source, Employee.class);
		Employee employee = element.getValue();
		employee.setId(id);
		employee.setPositionId(positionId);
		return employee;	
	}
 
 
Сообщения:20
https://www.tutorialspoint.com/java_xml/java_sax_parse_document.htm
Пригодится. Собственно полная инструкция разбора XML файлов от Дом, до Сакса.
 
 
Сообщения:4
JAXB как всегда выручил )

Интересный портал - https://moi-nikopol.online/
VPS беру у них - https://datacheap.ru/
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет