Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从xml文档java接收子节点_Java_Xml_Parsing - Fatal编程技术网

从xml文档java接收子节点

从xml文档java接收子节点,java,xml,parsing,Java,Xml,Parsing,我不熟悉xml解析,但我必须从特定的URL获取xml,然后从中只保存一个资源 如何获取xml: public Document getXMLFile(String urlToXml) { try { URL url = new URL(urlToXml); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); Documen

我不熟悉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>

20161003
澳元
1.46380
BGN
1.95580
BRL
3.64090
计算机辅助设计
1.47020
瑞士法郎
1.09180
人民币
7.49620
捷克克朗
27.02100
DKK
7.44630
英镑
0.87318
港币
8.71450
HRK
7.50530
哈夫
308.18000
印尼盾
14587.14000
ILS
4.22280
印度卢比
74.76600
日元
113.90000
韩元
1237.21000
MXN
21.61500
马尔
4.62720
诺克
8.96250
新西兰元
1.54540
PHP
54.17900
印尼国家电力公司
4.29330
罗恩
4.45050
摩擦
70.00100
瑞典克朗
9.59300
新加坡元
1.53260
泰铢
38.91000
尝试
3.38610
美元
1.12360
扎尔
15.26410
问题是——如何从所有这些东西中只获得一个指定的节点(例如USD)并将其保存为新的xml

输出xml的示例:

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

20160321
美元
1.12360
谢谢你的帮助

欢呼声

一种方法可以用于匹配所需的节点

如果确定只查找一个节点,XPath.evaluate也可以返回单元素对象,但此版本的节点列表将能够处理返回多个节点的情况。

一种方法可以用于匹配所需的节点


如果确定只查找一个节点,XPath.evaluate也可以返回单元素对象,但此版本的节点列表将能够处理返回多个节点的情况。

这是正确答案。XPath正是为了这个目的而设计的。这是值得花时间学习的。谢谢你的建议,我会尝试一下。欢迎你。如果您在使用NodeList时需要任何帮助,请阅读本页以了解该类(及其相关类)是如何工作的。如果还有其他问题,请告诉我。这是正确的答案。XPath正是为了这个目的而设计的。这是值得花时间学习的。谢谢你的建议,我会尝试一下。欢迎你。如果您在使用NodeList时需要任何帮助,请阅读本页以了解该类(及其相关类)是如何工作的。如果还有其他问题,请告诉我。
import javax.xml.xpath.*;

...

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