簡體   English   中英

從XML文檔Java接收子節點

[英]Receive child node from xml document java

我是xml解析的新手,但是我必須從特定的URL獲取XML,然后從中僅保存一個資源。

我如何獲取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>

感謝幫助,

干杯

一種方法是使用XPath來匹配所需的節點。

import javax.xml.xpath.*;

...

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

如果您確定只需要一個節點,則XPath.evaluate也可以返回單個Element對象,但是帶有NodeLists的該版本將能夠處理返回多個節點的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM