반응형
JAXB를 사용하여 XML 문자열에서 개체 생성
아래 코드를 사용하여 XML 문자열의 마샬링을 아래 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;
}
}
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)
방법a를 사용해야 한다.Reader
:
Person person = (Person) unmarshaller.unmarshal(new StringReader("xml 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());
}
getCaracterDataFromElement 메서드는
public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "";
}
If you want to parse using InputStreams
public Object xmlToObject(String xmlDataString) {
Object converted = null;
try {
JAXBContext jc = JAXBContext.newInstance(Response.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
InputStream stream = new ByteArrayInputStream(xmlDataString.getBytes(StandardCharsets.UTF_8));
converted = unmarshaller.unmarshal(stream);
} catch (JAXBException e) {
e.printStackTrace();
}
return converted;
}
참조URL: https://stackoverflow.com/questions/5458833/use-jaxb-to-create-object-from-xml-string
반응형
'programing' 카테고리의 다른 글
Axios 인터셉터 - vuex 스토어에서 응답을 반환하는 방법 (0) | 2022.04.25 |
---|---|
Java에서 null 문자열을 연결 중 (0) | 2022.04.25 |
Vue js 어레이로 문자열을 분할하고 목록 렌더러에서 사용하는 방법 (0) | 2022.04.25 |
일반 클래스의 정적 메서드? (0) | 2022.04.24 |
Vue: 버튼 클릭 시 .focus()를 호출하는 방법 (0) | 2022.04.24 |