0
XML 문자열을 Object로 구문 분석해야합니다. type 속성에 존재하는 값의 유형을 나타냅니다루트 아래에있는 여러 요소가있는 복잡한 XML 속성 - JAXB를 구문 분석하고 객체 모델을 만듭니다.
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
public class ParseXMLStringtoObject {
public static String getXMLString() {
StringBuilder returnString = new StringBuilder();
returnString.append("<output xmlprop = \"somevalue\"> ");
returnString.append("<Country> ");
returnString.append("<Country_Name equals=\"Spain\" type=\"1\" /> ");
returnString.append("<Country_Capital equals = \"Madrid\" type=\"1\" /> ");
returnString.append("<Country_Foundation_Date equals=\"1469-10-19\" type=\"3\" /> ");
returnString.append("<Country_Continent equals=\"Europe\" type = \"1\" /> ");
returnString.append("<Country_Population equals=\"45\" type = \"2\" /> ");
returnString.append("</Country> ");
return returnString.toString();
}
public static Object getObjectFromStringXml(Class<Country> country)
throws IllegalAccessException, InstantiationException {
Object obj = getObject(country.newInstance());
try {
StringReader reader = new StringReader(getXMLString());
JAXBContext context = JAXBContext.newInstance(country);
Unmarshaller jaxbUnmarshaller = context.createUnmarshaller();
JAXBElement<?> root = jaxbUnmarshaller.unmarshal(new StreamSource(reader), country);
obj = root.getValue();
} catch (Exception e) {
System.out.printf("Exception occoured while unmarshalling xml String to " + obj.getClass() +" Object", e);
}
return obj;
}
private static Object getObject(Object obj) {
if (obj instanceof Country) {
obj = (Country) obj;
}
return obj;
}
public static void main(String[] args) {
Country country = new Country();
//Class<Country> countryObj = new Class<Country>(); // I don't know how to convert my Country object
//or don't know the input value to the getObjectFromStringXml method
ParseXMLStringtoObject parseXML = new ParseXMLStringtoObject();
try{
//This is the place I have the doubt to call the parse method, regarding input
Object obj = parseXML.getObjectFromStringXml(Class<Country> countryObj);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
이 속성을 동일
public class Country {
private String Country_Name;
private String Country_Capital;
private String Country_Foundation_Date;
private String Country_Continent;
private String Country_Population;
public String getCountry_Name() {
return Country_Name;
}
public void setCountry_Name(String country_Name) {
Country_Name = country_Name;
}
public String getCountry_Capital() {
return Country_Capital;
}
public void setCountry_Capital(String country_Capital) {
Country_Capital = country_Capital;
}
public String getCountry_Foundation_Date() {
return Country_Foundation_Date;
}
public void setCountry_Foundation_Date(String country_Foundation_Date) {
Country_Foundation_Date = country_Foundation_Date;
}
public String getCountry_Continent() {
return Country_Continent;
}
public void setCountry_Continent(String country_Continent) {
Country_Continent = country_Continent;
}
public String getCountry_Population() {
return Country_Population;
}
public void setCountry_Population(String country_Population) {
Country_Population = country_Population;
}
}
구문 분석 코드 구현
나라 클래스 아래의 클래스와 XML 문자열 정보를 찾아보세요. 예를 들어, 1은 String, 2는 int, 3은 목록을 나타냅니다.
위의 XML 문자열을 Java Object에 매핑하는 솔루션을 누구든지 알려 주실 수 있습니까?
안녕 Arpan (@Arpan - https://stackoverflow.com/users/8561371/arpan를) 답장을 보내 감사합니다, 실제 프로그램에 로그인 해 보았습니다. 그러나 클래스 나라에 대해 명확하지 않습니다. 작성한 방법에 대한 입력을 도와 주시겠습니까? 실제 클래스 구현으로 업데이트 된 질문을하시기 바랍니다. –