Search

반응형

'attribute'에 해당되는 글 2건

  1. 2023.11.06 [JAVA] 자바에서 XML 데이터 다루는 방법. 2탄 Node와 NodeList
  2. 2020.07.18 [데이터베이스]엔터티(Entity), 속성(Attribute), 도메인(Domain) 무슨 의미일까? 1
반응형

이제 XML을 불러오는 방법을 알게 되었으니 파싱을 해서 원하는 Node의 엘리멘트, 속성값 그리고 텍스트 값을 추출하는 방법을 알아보도록 하겠습니다.

 

XML 정보를 가져오는 방법은 3가지가 있다고 했습니다.

1. URL 사이트 정보를 이용하는 방법

2. XML 파일을 읽는 방법

3. String으로 만들어 사용하는 방법

 

이전 포스팅을 보면 위 3가지로 파싱하는 방법을 쉽게 알 수 있습니다.

 

2023.10.14 - [Software/Java] - [JAVA] 자바에서 XML 데이터 다루는 방법. 1탄

 

[JAVA] 자바에서 XML 데이터 다루는 방법. 1탄

안녕하세요. 신기한 연구소입니다. 최근 새로운 개발 요청을 받았답니다. 우후~ 기존 통신 방식을 변경해서 재 구축해야 하는데요. 기존 방식은 자바에서 JSON과 XML을 혼합해서 요청과 응답을 하

tiboy.tistory.com

 

이제 파일을 파싱했다면 원하는 값을 추출해서 사용하는 방법을 알아야겠지요?

아래는 샘플 xml입니다. (sample.xml로 저장하기)

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<sample id="idSample">
    <people>
        <name>홍돌이</name>
        <age>25</age>
        <address value="korea">한국</address>
    </people>
</sample>
cs

 

1. 가장 상위 element 가져오기.

 

xml의 가장 최 상위 엘리먼트를 가져오는 방법입니다.

가장 상위를 받아야 그다음 단계의 Node를 받을 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String[] args)  throws Exception {
 
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder builder = factory.newDocumentBuilder();        
 
        Document document = builder.parse("./src/sample.xml");
 
       Element element = document.getDocumentElement();  
 
        System.out.println(element.getAttribute("id"));
 
        System.out.println(element.getNodeName());
        
        Node firstNode = element.getFirstChild();
        
        System.out.println("1::" + firstNode.getNodeName());
   }
cs

위 예제를 실행하면 element의 속성 "id"값과 node name을 출력합니다.

idSample
sample
1::#text

마지막 출력값은 #text가 나옵니다.

Element 타입으로 element를 document를 통해 받습니다.

여기서 element는 최 상위 요소인 <sample></sample>을 의미합니다.

element.getNodeName()을 통해 받은 값이 sample임을 알 수 있습니다.

element.getAttribute("id")로 element 내 속성값을 가져올 수 있습니다.위 예제를 보면 "idSample"값을 가져왔습니다.

 

2. 첫 번째 Node 가져오기

 

14라인을 보면 Node 타입을 사용하고 있습니다. element를 시작으로 첫 번째 node를 받습니다. 바로 <people>인데요. getNodeName()를 사용해서 값을 가져왔는데 people 아닌 #text 가 출력됩니다. 그 이유는 xml 태그 사이의 공백 때문입니다. <sample>   <people>... 왼쪽을 보면 두 태그 사이에 공백이 있습니다.

공백을 없애도 되지만 Node 타입을 if문으로 비교해서 필터링할 수도 있습니다.

 

3. NodeList로 xml 정보 가져오기

 

그렇다면 첫 번째 node를 가져오고 리스트를 활용해서 xml 정보를 가져오는 소스를 이어서 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
        NodeList nList = firstNode.getNextSibling().getChildNodes();
 
        for(int i = 0; i < nList.getLength(); i++){
            Node item = nList.item(i);
            System.out.println("TYpe>>" + item.getChildNodes().getLength());
            if(item.getNodeType() == Node.ELEMENT_NODE){
                System.out.println(item.getNodeName());
                System.out.println(item.getTextContent());
                if (item.getAttributes().getLength() > 0){
                    System.out.println(item.getAttributes().getNamedItem("value").getNodeValue());
                }
             } 
        }
cs

위 소스를 보면 NodeList 타입을 가져오는데 firstNode에서 ChildNodes를  통해 NodeList 타입을 받아야 하지만 firstNode는 공백(#text)이라서 그 하위의 태그가 없습니다. 그래서 NextSibling을 통해서 다음 태그로 이동한 뒤 NodeList를 가져옵니다. 

4번 라인을 보면 for 문을 통해 nList(NodeList)의 Node 타입의 item(i)를 받습니다.

5번 라인의 의미는 해당 Node 하위에 몇 개의 Node 가 있는지 확인할 때 사용합니다.6번 라인에서 해당 Node 가 공백(#text)인 경우가 있었기에 Node.ELEMENT_NODE를 사용해서 거를 수 있습니다.7번 라인의 if 문 내부는 이제 공백이 아닌 정상적인 element의 정보를 활용할 수 있습니다.item.getNodeName() 은 현재 item의 태그명을 보여줍니다.item.getTextContent()는 현재 item에 싸여있는 <a> b </a> 이렇게 a에 싸여있는 b를 보여줍니다.이 값은 item.getFirstChild().getNodeValue() 로도 가져올 수 있습니다.

 

<address value="korea">

 

여기서 value는 address의 속성(attribute)라고 합니다.9번 라인으로 체크를 한 뒤 10번 라인으로 getNameItem("value")에 속성명을 넣고 getNodeValue()로 address의 value 속성값을 가져올 수 있습니다.

 

4. 마무리

 

이렇게 xml의 최상위 element와 속성값 받기,하위 Node와 NodeList 받아서 그 값들을 활용하는 방법에 대해 알아봤습니다.이 정도면 xml에서 값을 받고 활용하는데 충분해 보입니다.

 

다음 포스팅은 동적으로 xml과 내부 element를 생성하는 방법에 대해 알아보겠습니다.

반응형
반응형

안녕하세요 신기한 연구소입니다.

여름인데 생각보다 많이 덥지는 않네요.

저녁엔 쌀쌀해서 7월인데

이불을 찾게 되네요. ㅎㅎ

예전부터 프로젝트를 하다 보면

사실 개발자인데 DB작업도

같이 해야 하는 경우가 허다합니다.

대형 프로젝트의 경우는

DBA와 설계자가 분석, 설계하고

데이터베이스를 구성해주고

개발자는 ERD나 테이블 정의서 등을

보면서 쿼리(SQL)를 작성하는데요.

 

그리 크지 않거나 기존 사이트에

추가 작업용 미니 프로젝트를 하게 되면

개발자가 직접 테이블도 설계하고

ERD도 그리거나 추가하는 등

어찌 보면 개발자가 할 일이 아닌 것도

접하게 됩니다.

그렇다고 못한다고 빼 째라 할 수도 없고~

 

개발 하다가 데이터베이스 관련 작업을

하는 경우가 다반사기에..

기본 용어를 정리해봤어요.

물론 대부분 아시는 분들도 많지만..

저도 나름 복습하는 의미로~

엔터티(Entity), 속성(Attribute), 도메인(Domain)

 

 

먼저,

엔터티(Entity)입니다.

엔티티로 말하는 경우도 있는데

엔터티로 사용하면 됩니다.

 

그럼 엔터티(Entity)는 무엇일까요?

쉽게 개발할 때 쿼리(SQL) 작성 시

from 절에 쓰는 테이블로 이해하면 편합니다.

우리가 개발하는 데이터베이스 프로그램은

대부분 업무를 기반으로 합니다.

업무를 하기 위해서는 정보가 필요한데요.

은행을 생각해보면

고객, 계좌, 지점, 직원 등을

먼저 생각할 수 있지요.

고객, 계좌, 지점, 직원은

은행에서 업무적으로 필요한 객체들입니다.

전부 명사로 되어 있는데

각 명사들은 식별하거나 특징을

나타낼 수 있는 속성을 가지고 있어요.

고객이라면, 고객번호, 이름, 연락처 등

이렇게 업무적으로 필요하고

속성들을 저장할 수 있는 것들을

엔터티(Entity)라 합니다.

 

이렇게 이야기하다 보니

속성(Attribute)도 설명이 되었네요.

테이블을 구성하는 컬럼들을

속성이라 생각하면 됩니다.

그 속성들은 값을 가질 수 있어요.

그 값이 바로 업무에 필요한 정보들이고요.

예를 들면 고객이라는 엔터티(Entity)의 속성은

이름, 연락처, 주소, 가입일 등이 있습니다.

 

우리가 코드성 데이터를 구성하고

사용하다 보면 도메인(Domain)이라는

용어를 접하게 되는데요.

도메인은 위에서 설명한

속성들에 가질 수 있는 값의 범위를

나타냅니다.

 

예를 들어보면,

성별에 대해 코드 속성이 있다고 하면

성별은 남/여 둘 중 하나가 됩니다.

그래서 코드로 0 = , 1 =

이렇게 정의했다고 하면

0, 1 외의 값 외에는 사용할 수 없게

정의하는 게 도메인입니다.

또한 0, 1은 숫자이며 길이는 1 자리면 되기에

타입과 사이즈를 정해주는 것도

도메인이라 합니다.

 

테이블의 컬럼 값을 구성할 때

값의 범위, 데이터타입, 제약사항 등을

설정하는데 그 범위 값의 설정을

도메인이라 생각하면 됩니다.

 

이번 포스팅에서는 엔터티, 속성, 도메인에

대해 간단히 살펴봤습니다.

 

날씨도 덥고

코로나로 개발하기 힘든 환경인데

다들 힘내시고

조금이라도 도움이 되길 바랍니다.

 

잘못된 내용이나 수정이 필요하면 댓글 주세요~

반응형