2017-06-03 123 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