Java2023. 3. 26. 00:57

JAXEN을 이용하여 XML파싱

package xml;

import org.jaxen.XPath;
import org.jaxen.dom.DOMXPath;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
import java.util.List;

public class JaxenMain {
    public static void main(String[] args) throws Exception {
        String xml = "<ROOT><META>메타정보</META><BOOKS><BOOK><AUTHOR>BONG</AUTHOR><TITLE>BONG'S STORY</TITLE></BOOK><BOOK><AUTHOR>HONG</AUTHOR><TITLE>HONG'S STORY</TITLE></BOOK><BOOK><AUTHOR>KIM</AUTHOR><TITLE>KIM'S STORY</TITLE></BOOK></BOOKS></ROOT>";

        XPath xpath = new DOMXPath("/ROOT/META");
        List<Element> elements = xpath.selectNodes(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml))).getDocumentElement());

        for (Element element : elements) {
            System.out.println(element.getNodeName());
            System.out.println(element.getTextContent());
        }

       xpath = new DOMXPath("/ROOT/BOOKS/BOOK/AUTHOR");
        elements = xpath.selectNodes(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml))).getDocumentElement());

        for (Element element : elements) {
            System.out.println(element.getNodeName());
            System.out.println(element.getTextContent());
        }

        xpath = new DOMXPath("/ROOT/BOOKS/BOOK/TITLE");
        elements = xpath.selectNodes(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml))).getDocumentElement());

        for (Element element : elements) {
            System.out.println(element.getNodeName());
            System.out.println(element.getTextContent());
        }
    }
}

 

 

[참고]

https://openai.com/blog/chatgpt

 

Introducing ChatGPT

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests.

openai.com

 

Posted by 이야봉
Java2021. 2. 16. 19:41

[예시]  주어진 3개의 매퍼 파일(XML)에서 테이블명과 뷰명을 추출하시오.
              - 테이블명  첫글자 : T_
              - 뷰명 첫글자 : V_

 

A.xml

SELECT *
FROM T_01

SELECT *
FROM T_02

SELECT *
FROM T_03

 

B.xml

SELECT *
FROM V_01

SELECT *
FROM V_02

SELECT *
FROM V_03

 

C.xml

INSERT INTO T_01
VALUES ('A');

SELECT *
FROM T_02

SELECT *
FROM V_02

 

 

추출과정

1. 위 3개의 파일형식을 XML(3개) => TXT(3개)로 변경

D:\FolderName>ren *.xml *.txt

 

2. TXT파일(3개) => TXT파일(1개)로 병합(ABC.txt)

  bluefive.pairsite.com/txtcollector.htm

 

 

3. ABC.txt(병합 완료)

d:\prac\xmlS\A.xml
************************************************************************
<!-- A.xml -->
SELECT *
FROM T_01

SELECT *
FROM T_02

SELECT *
FROM T_03


d:\prac\xmlS\B.xml
************************************************************************
<!-- B.xml -->

SELECT *
FROM V_01

SELECT *
FROM V_02

SELECT *
FROM V_03


d:\prac\xmlS\C.xml
************************************************************************
<!-- C.xml -->

INSERT INTO T_01
VALUES ('A');

SELECT *
FROM T_02

SELECT *
FROM V_02

 

Java로 추출작업 수행

4. txt파일을 FileReader로 한 Line씩 추출하여, List1에 담기

5. Line별로 시작단어가 T_ 이거나, V_인 경우를 List2에 담기

6. List2에서 중복제거

 

 

추출결과

T_01
T_02
T_03
V_01
V_02
V_03

 

 

 

 

참조링크

 

 

 bluefive.pairsite.com/txtcollector.htm

 

 

Text file merging tool - TXTcollector, freeware!

 

bluefive.pairsite.com

editorizer.tistory.com/240

 

파일 확장자 일괄 변경하는 방법을 알아보자

여기서 파일 확장자 일괄 변경이라는 것은 특정 파일을 변환하는 것이 아니라 파일 뒤에 붙는 확장자 이름을 바꾸는 것을 말합니다. 일반적으로 파일 확장자를 변경하려면 위 과정처럼 해당 파

editorizer.tistory.com

 

jeong-pro.tistory.com/69

 

자바 파일 입출력 (txt파일 한 문자씩, 한 줄씩, 한 번에 읽기)

자바 파일 입출력 원리 1. 파일 객체를 만든다. 2. 해당 파일을 열어 읽는다. (+읽은 내용 알아서 처리, 어디다 쓰든지 문자열을 바꾸던지 뭐 맘대로 하면 된다.) 3. 파일을 닫는다. 1) 한 문자씩 읽

jeong-pro.tistory.com

 

www.dante2k.com/444

 

String 데이터에서 split() 메소드 사용시 띄어쓰기 인식하기

 자바에서 문자열을 split하는 경우가 꽤 됩니다. 뭐.. 데이터 파싱을 위해서 자르기도 하고, 필요에 따라 사용하는데요..  이런 경우 "ABC DEF" 같이 중간에 띄어쓰기가 있는데 이를 인식하여 자르

www.dante2k.com

 

m.blog.naver.com/pgh7092/221130579329

 

JAVA 자바 리스트(List) 중복 제거하는 3가지 방법

자바에서 중복을 제거하는 방법은 여러 가지가 있다. 본 포스팅에서는 총 3가지 방법에 대해서 설명한다. 1...

blog.naver.com

 

Posted by 이야봉
Java2020. 10. 18. 17:25

공업/방업 수치가 동일한 저글링은 같은 저글링으로 가정하고,

중복 제거하여 1기로 취급하도록 구현

 

 

1. 저글링 클래스

package prac01;

public class Zergling {
	// 필드
	String name;		// 유닛명
	int attackUp;		// 공업 단계(0~3)
	int armorUp;		// 방업 단계(0~3)
	
	// 생성자
	public Zergling(String name, int attackUp, int armorUp) {
		this.name = name;
		this.attackUp = attackUp;
		this.armorUp = armorUp;
	}
	
	@Override
	public String toString() {
		return "Zergling [name=" + name + ", attackUp=" + attackUp + ", armorUp=" + armorUp + "]";
	}
	
}

 

2.1. HashSet을 이용한 중복제거 실행 클래스

package prac01;

import java.util.HashSet;
import java.util.Set;

public class ZerglingMain {
	public static void main(String[] args) {
		Set<Zergling> set = new HashSet<>();
		
		Zergling z1 = new  Zergling("Zergling", 0, 0);		// 노업 저글링
		Zergling z2 = new  Zergling("Zergling", 0, 0);		// 노업 저글링
		Zergling z3 = new  Zergling("Zergling", 0, 0);		// 노업 저글링
		Zergling z4 = new  Zergling("Zergling", 3, 0);		// 공3업 저글링
		Zergling z5 = new  Zergling("Zergling", 3, 3);		// 풀업 저글링
		Zergling z6 = new  Zergling("Zergling", 3, 3);		// 풀업 저글링
		Zergling z7 = new  Zergling("Zergling", 1, 1);		// 공방1업 저글링
		
		set.add(z1);
		set.add(z2);
		set.add(z3);
		set.add(z4);
		set.add(z5);
		set.add(z6);
		set.add(z7);
		
		System.out.println("set.size(): " + set.size());
		for (Zergling z : set) {
			System.out.println(z.hashCode());
			System.out.println(z);
		}
		
	}
}

2.2. 실행결과

set.size(): 7
2046562095
Zergling [name=Zergling, attackUp=0, armorUp=0]
932172204
Zergling [name=Zergling, attackUp=3, armorUp=3]
1225358173
Zergling [name=Zergling, attackUp=1, armorUp=1]
1342443276
Zergling [name=Zergling, attackUp=0, armorUp=0]
1587487668
Zergling [name=Zergling, attackUp=3, armorUp=0]
1199823423
Zergling [name=Zergling, attackUp=3, armorUp=3]
769287236
Zergling [name=Zergling, attackUp=0, armorUp=0]

※ 중복제거 실패

 

3.1. 저글링 클래스 보완(hashCode, equals 메소드 재정의)

package prac01;

public class Zergling {
	// 필드
	String name;		// 유닛명
	int attackUp;		// 공업 단계(0~3)
	int armorUp;		// 방업 단계(0~3)
	
	// 생성자
	public Zergling(String name, int attackUp, int armorUp) {
		this.name = name;
		this.attackUp = attackUp;
		this.armorUp = armorUp;
	}
	
	@Override
	public int hashCode() {
		return this.name.hashCode() + this.attackUp + this.armorUp;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Zergling) {
			Zergling tmp = (Zergling)obj;
			if (this.attackUp == tmp.attackUp && this.armorUp == tmp.armorUp) {
				return true;
			}
		}
		return false;
	}

	@Override
	public String toString() {
		return "Zergling [name=" + name + ", attackUp=" + attackUp + ", armorUp=" + armorUp + "]";
	}
	
}

 

3.2. 저글링 클래스 보완 후 재실행 결과

set.size(): 4
744866486
Zergling [name=Zergling, attackUp=0, armorUp=0]
744866492
Zergling [name=Zergling, attackUp=3, armorUp=3]
744866489
Zergling [name=Zergling, attackUp=3, armorUp=0]
744866488
Zergling [name=Zergling, attackUp=1, armorUp=1]

※ 중복제거 성공 (공업, 방업 수치가 동일한 저글링은 같은 개체로 취급)

 

 

참조
marobiana.tistory.com/100
superfelix.tistory.com/61

 

 

 

 

Posted by 이야봉