如何将XML存储到Java数组中

时间:2017-06-03 09:51:28

标签: java arrays jsoup

I have an XML with a list of beaches.

每个条目如下:

<beach> 
    <name>Dor</name>
    <longitude>32.1867</longitude>
    <latitude>34.6077</latitude>
</beach>

我正在使用Jsoup将此XML读入Document doc。

有没有简单的方法来处理这些数据? 我希望能够做到这样的事情:

x = my_beach_list["Dor"].longitude;

目前我把它放在Jsoup Doc中,我正在使用:

x = get_XML_val(doc, "Dor", "longitude");

将get_XML_val定义为:

private String get_XML_val(Document doc, String element_name, String element_attr) {
    Elements beaches = doc.select("beach");
    Elements one_node = beaches.select("beach:matches(" + element_name + ")");
    Element node_attr = one_node.select(element_attr).first();
    String t = node_attr.text();
    return t;
}

由于 ORI

2 个答案:

答案 0 :(得分:0)

Java是一种面向对象的语言,通过使用这一事实可以获得很多好处,例如,您可以将XML解析为java数据结构一次,并将其用作查找,例如:

class Beach {

    private String name;
    private double longitude;
    private double latitude;

    // constructor;

    // getters and setters;
}

现在,当您设置了类时,您可以开始将xml解析为海滩对象列表:

List<Beach> beaches = new ArrayList<>(); 
// for every beach object in the xml
beaches.add(new Beach(val_from_xml, ..., ...);

现在,当您想要查找特定对象时,可以查询您的集合。

beaches.stream().filter(beach -> "Dor".equals(beach.getName()));

答案 1 :(得分:0)

您可以使用XPath求值程序直接对xml执行查询,并获取结果。例如:名为 Dor 海滩经度值的xpath表达式为:/beach[name="Dor"]/longitude

评估xpath表达式的相应java代码可以写成:

private static void getValue(String xml) {
    try {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

        Document doc = dBuilder.parse(new StringBufferInputStream(xml));
        doc.getDocumentElement().normalize();

        XPath xPath = XPathFactory.newInstance().newXPath();
        NodeList nodeList = (NodeList) xPath.compile("/beach[name=\"Dor\"]/longitude").evaluate(doc,
                XPathConstants.NODESET);

        System.out.println(nodeList.item(0).getTextContent());
    } catch (IOException | ParserConfigurationException | XPathExpressionException | SAXException exception) {
        exception.printStackTrace();
    }

}

上述方法打印经度值为:32.1867

有关Xpath here的更多信息。