我有以下XML数据。我想得到lat& lng值仅与位置有关,而不是西南。我怎么能这样做而不必读西南。
`<geometry>
<location>
<lat>51.5739894</lat>
<lng>-0.1499698</lng>
</location>
<southwest>
<lat>51.5727314</lat>
<lng>-0.1511809</lng>
</southwest>
</geometry>`
到目前为止,我已尝试过: `
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes){
if(localName.equals("location")){
Node n1 = new Node(
Double.parseDouble(attributes.getValue("lat"))
Double.parseDouble(attributes.getValue("lng"))
);
current = n1;
}
}`
答案 0 :(得分:2)
如果你的xml不是很大,那么如果你使用XPathFactory
的方法就可以了。否则转到SAX解析器。但是在编写SAX解析器时需要进行额外的处理,特别是在我只想要location
lat
值的条件时。
我会使用xpath方法,使用起来非常简单,不需要使用第三方。它可以通过java.xml。*
完成代码将是:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse( new File( ".//input.xml" ) );
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();
XPathExpression latExpr = xpath.compile( "//location/lat" );
XPathExpression lngExpr = xpath.compile( "//location/lng" );
Object exprEval = latExpr.evaluate( doc, XPathConstants.NUMBER );
if ( exprEval != null )
{
System.out.println( "Location's lat value is :" + exprEval );
}
exprEval = lngExpr.evaluate( doc, XPathConstants.NUMBER );
if ( exprEval != null )
{
System.out.println( "Location's lng value is :" + exprEval );
}
input.xml
包含您的xml。
它使用xpath://location/lat
,这意味着获取父lat
为location
的值。
并将xpath评估为NUMBER
。
输出是:
Location's lat value is :51.5739894
Location's lng value is :-0.1499698
答案 1 :(得分:1)
对于这种特殊情况,如果我是你,我会使用org.json
解析作为JSONObject来查询每个节点。
JSONObject jsonObject = XML.toJSONObject(xml).getJSONObject("geometry").getJSONObject("location");
String lat = jsonObject.getString("lat");
String lng = jsonObject.getString("lng");