2017-05-23 17 views
0

다음 XML 데이터가 있습니다. 남서쪽이 아닌 해당 위치에 대해서만 위도lng 값을 얻고 싶습니다. 남서쪽에서도 읽을 필요없이 어떻게 할 수 있습니까?요소 ID 내에서 속성을 가져 오는 방법

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

답변

1

, 내가 당신이라면 된 JSONObject는 모든 노드를 쿼리로 나는 org.json 구문 분석을 사용합니다.

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

감사합니다, 나는 JSON 파서를 사용하지 않은하지만 난 그것을 갈 줄 것입니다. – AnthonyJ

2

당신이 XPathFactory를 사용하여 접근 방식을 사용하는 경우 XML은 확인하지 거대합니다. 그렇지 않으면 SAX 파서로 이동하십시오. 그러나 특히 SAX 파서를 작성할 때는 특별히 locationlat 값만 원하는 상황을 만들 때 추가 처리가 필요합니다.

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을 사용합니다. 즉, 값이 location 인 것을 의미합니다. xpath를 NUMBER으로 평가하십시오.

출력은 다음과 같습니다

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

감사합니다, 이것은 매우 흥미로운 대답입니다. – AnthonyJ

+0

@AnthonyJ 답변이 유용하다고 생각하면 upvoting을 고려하십시오. 감사. – SomeDude