2017-05-23 5 views
0

Ich habe die folgenden XML-Daten. Ich würde gerne die lat & lng Werte, die nur den Standort, nicht den Südwesten betreffen. Wie kann ich das machen, ohne auch den Südwesten lesen zu müssen?Wie bekomme ich ein Attribut innerhalb einer Element ID

`<geometry> 
    <location> 
    <lat>51.5739894</lat> 
    <lng>-0.1499698</lng> 
    </location> 
    <southwest> 
    <lat>51.5727314</lat> 
    <lng>-0.1511809</lng> 
    </southwest> 
</geometry>` 

Bisher habe ich versucht: `

@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; 
     } 
    }` 

Antwort

1

Für diesen speziellen Fall, wenn ich Sie wäre ich org.json Parse verwenden werden als JSONObject jeden Knoten abzufragen.

JSONObject jsonObject = XML.toJSONObject(xml).getJSONObject("geometry").getJSONObject("location"); 
String lat = jsonObject.getString("lat"); 
String lng = jsonObject.getString("lng"); 
+0

Danke, ich habe den Json-Parser nicht verwendet, aber ich werde es versuchen. – AnthonyJ

2

Wenn Ihr XML nicht riesig ist, ist es in Ordnung, wenn Sie einen Ansatz mit XPathFactory verwenden. Ansonsten geh zum SAX-Parser. Aber Sie müssen zusätzliche Verarbeitung beim Schreiben von SAX-Parsern machen, besonders wenn Sie Bedingungen haben, wie ich nur location 's lat Wert will.

Ich würde einen Xpath-Ansatz verwenden, sehr einfach zu bedienen, keine Notwendigkeit, Dritte zu verwenden. Es kann über java.xml erfolgen *

-Code wäre:.

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 Ihre xml enthält. Es verwendet den Xpath: //location/lat was bedeutet, dass Sie mir den Wert lat erhalten, dessen Eltern location ist. Und evaluieren Sie den xpath als NUMBER.

Ausgang ist:

Location's lat value is :51.5739894 
Location's lng value is :-0.1499698 
+0

Danke, das ist eine sehr interessante Antwort – AnthonyJ

+0

@AnthonyJ Wenn Sie die Antwort nützlich finden, überlegen Sie, upvoting. Vielen Dank. – SomeDude

Verwandte Themen