如何将XML存储到Java数组中


I have an XML with a list of beaches.

每个条目看起来像:

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

我正在使用jsoup将此XML读取到文档文档中。

是否有一种简单的方法来处理这些数据?我喜欢做这样的事情:

x = my_beach_list["Dor"].longitude;

目前,我将其留在JSOUP文档中,我正在使用:

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

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()));

您可以使用XPath评估器直接在XML上执行查询,并可以获取结果。例如: xpath表达式获得经度 beach> beach 带有名称 dor 的值: /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的信息。

最新更新