如何获取元素ID中的属性

时间:2017-05-23 13:00:51

标签: java xml xml-parsing sax

我有以下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;
        }
    }`

2 个答案:

答案 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,这意味着获取父latlocation的值。 并将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");