2017-05-23 27 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

xmlが巨大でない場合は、XPathFactoryを使用する方法を使用しても問題ありません。それ以外の場合は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を使用しています。これは、親がlocationlatの値を取得することを意味します。 xpathをNUMBERと評価してください。

出力は次のとおりです。

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

ありがとう、これは非常に興味深い答えです。 – AnthonyJ

+0

@AnthonyJ答えが役に立つと分かった場合は、upv​​otingを検討してください。ありがとう。 – SomeDude

関連する問題