티스토리 뷰
xpath를 사용하면 원하는 태그의 value만 추출하기가 수월한데, 서칭결과 내 로컬에 있는 xml 파일들만으로 예제가 나와있었다.
나의 경우는 외부 url에서 xml 파싱해와서 거기서 원하는 태그의 값만 뽑아오고 싶었던 상황.
[전체흐름]
외부 url xml 파싱 -> 파싱결과를 readLine을 통해 전체 xml을 String으로 형변환 -> 해당 String을 xpath를 통해 원하는 값만 추출
외부 url로 얻어온 xml
<user> <name>홍길동</name> <age>20</age> <job>programmer</job> <gender>female</gender> </user> |
java import 경로
import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; |
java 코드
URL obj = new URL("호출할 url"); HttpURLConnection con = (HttpURLConnection)obj.openConnection(); con.setDoOutput(true); con.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); String line; String resultLine = ""; while((line = in.readLine()) != null) { resultLine += line; } in.close();
Document xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(resultLine.getBytes())); xml.getDocumentElement().normalize();
XPath xpath = XPathFactory.newInstance().newXPath(); Node userName= (Node) xpath.evaluate("//user/name", xml, XPathConstants.NODE); Node userAge= (Node) xpath.evaluate("//user/age", xml, XPathConstants.NODE); System.out.println("유저이름 : " + userName.getTextContent + " / 유저나이 : " + userAge.getTextContent); |
** 만약 getTextContent() 에서 The method getTextContent() is undefined for the type Node 서 에러가 나오면, 이클립스 properties > Java Build Path에서 Web App Libraries의 위치를 JRE보다 아래로만 내리면됨)
*** xml 태그가 예시와 다른 경우에는 서칭하면 잘 나와있어서 별도로 작성하진 않았음
'Java' 카테고리의 다른 글
두 개의 LinkedHashMap의 값들 비교하기 (0) | 2018.02.22 |
---|---|
HashMap 에서 최대값(Max) 뽑기 (0) | 2018.01.31 |
(cafe24 카페24 호스팅) Access denied ~~ 에러 뜰 때 (2) | 2017.04.20 |
Generics란? (0) | 2017.02.08 |
System 클래스의 스트림 멤버들 (0) | 2017.02.06 |