2016-10-04 4 views
0

XML 파싱을 처음 접했지만 특정 URL에서 XML을 가져온 다음 하나의 리소스 만 저장해야합니다.XML 문서에서 자식 노드 받기 java

내가 얼마나 XML :

이 완벽하게 작동하고 좀이 하나 개의 문서를 반환
public Document getXMLFile(String urlToXml) { 
    try { 
     URL url = new URL(urlToXml); 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
     Document document = documentBuilder.parse(url.openStream()); 
     return document; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

:

<CRates xmlns="****" xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="******"> 
    <Date>20161003</Date> 
    <Currencies> 
     <Currency> 
      <ID>AUD</ID> 
      <Rate>1.46380</Rate> 
     </Currency> 
     <Currency> 
      <ID>BGN</ID> 
      <Rate>1.95580</Rate> 
     </Currency> 
     <Currency> 
      <ID>BRL</ID> 
      <Rate>3.64090</Rate> 
     </Currency> 
     <Currency> 
      <ID>CAD</ID> 
      <Rate>1.47020</Rate> 
     </Currency> 
     <Currency> 
      <ID>CHF</ID> 
      <Rate>1.09180</Rate> 
     </Currency> 
     <Currency> 
      <ID>CNY</ID> 
      <Rate>7.49620</Rate> 
     </Currency> 
     <Currency> 
      <ID>CZK</ID> 
      <Rate>27.02100</Rate> 
     </Currency> 
     <Currency> 
      <ID>DKK</ID> 
      <Rate>7.44630</Rate> 
     </Currency> 
     <Currency> 
      <ID>GBP</ID> 
      <Rate>0.87318</Rate> 
     </Currency> 
     <Currency> 
      <ID>HKD</ID> 
      <Rate>8.71450</Rate> 
     </Currency> 
     <Currency> 
      <ID>HRK</ID> 
      <Rate>7.50530</Rate> 
     </Currency> 
     <Currency> 
      <ID>HUF</ID> 
      <Rate>308.18000</Rate> 
     </Currency> 
     <Currency> 
      <ID>IDR</ID> 
      <Rate>14587.14000</Rate> 
     </Currency> 
     <Currency> 
      <ID>ILS</ID> 
      <Rate>4.22280</Rate> 
     </Currency> 
     <Currency> 
      <ID>INR</ID> 
      <Rate>74.76600</Rate> 
     </Currency> 
     <Currency> 
      <ID>JPY</ID> 
      <Rate>113.90000</Rate> 
     </Currency> 
     <Currency> 
      <ID>KRW</ID> 
      <Rate>1237.21000</Rate> 
     </Currency> 
     <Currency> 
      <ID>MXN</ID> 
      <Rate>21.61500</Rate> 
     </Currency> 
     <Currency> 
      <ID>MYR</ID> 
      <Rate>4.62720</Rate> 
     </Currency> 
     <Currency> 
      <ID>NOK</ID> 
      <Rate>8.96250</Rate> 
     </Currency> 
     <Currency> 
      <ID>NZD</ID> 
      <Rate>1.54540</Rate> 
     </Currency> 
     <Currency> 
      <ID>PHP</ID> 
      <Rate>54.17900</Rate> 
     </Currency> 
     <Currency> 
      <ID>PLN</ID> 
      <Rate>4.29330</Rate> 
     </Currency> 
     <Currency> 
      <ID>RON</ID> 
      <Rate>4.45050</Rate> 
     </Currency> 
     <Currency> 
      <ID>RUB</ID> 
      <Rate>70.00100</Rate> 
     </Currency> 
     <Currency> 
      <ID>SEK</ID> 
      <Rate>9.59300</Rate> 
     </Currency> 
     <Currency> 
      <ID>SGD</ID> 
      <Rate>1.53260</Rate> 
     </Currency> 
     <Currency> 
      <ID>THB</ID> 
      <Rate>38.91000</Rate> 
     </Currency> 
     <Currency> 
      <ID>TRY</ID> 
      <Rate>3.38610</Rate> 
     </Currency> 
     <Currency> 
      <ID>USD</ID> 
      <Rate>1.12360</Rate> 
     </Currency> 
     <Currency> 
      <ID>ZAR</ID> 
      <Rate>15.26410</Rate> 
     </Currency> 
    </Currencies> 
</CRates> 

질문은 - 내가 어떻게 (예를 들어, USD에 대한) 하나 개의 특정 노드를 얻을 수를 이 모든 것들로부터 새로운 xml로 저장 하시겠습니까? 출력 XML에 대한

예 : 도움을

<CRates> 
    <Date>20160321</Date> 
    <ID>USD</ID> 
    <Rate>1.12360</Rate> 
    </Currency> 
</CRates> 

감사합니다,

건배

답변

3

한 가지 방법은 필요한 노드를 일치 XPaths을 사용할 수 있습니다.

import javax.xml.xpath.*; 

... 

XPathFactory xpathFactory = XPathFactory.newInstance(); 
XPath xpath = xpathFactory.newXPath(); 
NodeList nodes = (NodeList) xpath.evaluate("//*[@id='USD']", document, XPathConstants.NODESET); 

하나만 당신이 XPath.evaluate도 하나의 요소 객체를 반환 할 수 있습니다 찾고있는 노드 만 NodeLists이 버전은 다중 노드가 반환되는 시나리오를 처리 할 수있을 것이 확실합니다.

+2

정답입니다. XPath는이 목적을 위해 만들어졌습니다. 배우는 데 시간을 할애 할 가치가 있습니다. – VGR

+0

제안 해 주셔서 감사합니다. 시도해 보겠습니다. – Reborn

+0

안녕하세요. NodeList로 작업하는 데 도움이 필요하면이 페이지를 읽어서 클래스 (및 관련 클래스)가 어떻게 작동하는지 알 수 있습니다. https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/NodeList.html. 다른 문제가 있으면 알려주십시오. – dahui