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的信息。