Java XML Parsing 할 때 attributes로 설정하는 법

@ZungTa · 2024-08-20 화요일 · 2 min read

XML을 표시하는 방법에는 두 가지가 있다.

  • Child Elements

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <person>
    <name>John</name>
    <job>Developer</job>
    	<department>
    		<name>Dev</name>
    		<headCount>20</headCount>
    	</department>
    </person>
  • Attributes

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <person name="John" job="Developer">
    	<department name="Dev" headCount="20" />
    </person>

Java에서 Object를 XML로 변환하기 위해서는 이런 방식으로 할 수 있다.

// Person.java

@Getter
@AllArgsConstructor
public class Person {

  private String name;

  private String job;

  private Department department;

  @Getter
  @AllArgsConstructor
  public static class Department {

    private String name;

    private Integer headCount;
  }
}

테스트 파일

void xmlTest() throws JsonProcessingException {
  XmlMapper xmlMapper = new XmlMapper();
  Department department = new Department("Dev", 20);
  Person person = new Person("John", "Developer", department);
  String personXml = xmlMapper.writeValueAsString(person);
  System.out.println(personXml);
}

출력 결과

<Person>
  <name>John</name>
  <job>Developer</job>
  <department>
    <name>Dev</name>
    <headCount>20</headCount>
  </department>
</Person>

기본적으로 Child Elements 방식으로 출력한다.

Attributes 방식으로 출력하기 위해서는 Class에서 각 property에 @JacksonXmlProperty(isAttribute = true) 붙여주면 된다.

// Person.java

@Getter
@AllArgsConstructor
public class Person {

  @JacksonXmlProperty(isAttribute = true)
  private String name;

  @JacksonXmlProperty(isAttribute = true)
  private String job;

  private Department department;

  @Getter
  @AllArgsConstructor
  public static class Department {

    @JacksonXmlProperty(isAttribute = true)
    private String name;

    @JacksonXmlProperty(isAttribute = true)
    private Integer headCount;
  }
}

그러면 Annotation을 붙인 항목들은 Attributes 방식으로 표현된다.

<Person name="John">
  <job>Developer</job>
  <department name="Dev" headCount="20"/>
</Person>
@ZungTa
I'm a backend developer
© ZungTa Devlog, Built with Gatsby