2017-06-03 127 views
0
I have an XML with a list of beaches. 

每个条目的样子:如何将XML存储到Java数组

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

我使用Jsoup读这个XML转换为书籍DOC。

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

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

+1

使用实际的XML对象绑定库(如JAXB),将XML解析为Java对象,并将这些Java对象存储在您的列表中(或者在Map 中,其中的关键字是海滩,因为这就是你想要的) –

+0

嗨,我不知道地图。正是我需要的。谢谢,并为延迟抱歉:-) – Ori

回答

0

Java是一种面向对象的语言, d,你会使用这个事实,例如,你可以一次分析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())); 
0

您可以使用XPath评估器直接对xml执行查询并获得结果。例如:xpath表达式得到经度值要海滩与名称多尔是:/beach[name="Dor"]/longitude

相应的Java代码,以计算XPath表达式可以写成:

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

更多关于Xpaths here