2016-09-08 4 views
0

私は現在Javaの小さな天気API(YR.NOから)に取り組んでいます。Java - 親の子からの属性値

APIは次の図のようにXML形式です。
注:同じAPI内に複数の「ボックス」があり、異なる時間があります。これにより

public void startElement(String uri, String localName, String qName, 
       Attributes attributes) throws SAXException 
{ 
    for (int i = 0; i < attributes.getLength(); i++) 
    { 
     String attributeName = attributes.getLocalName(i); 
     String attributeValue = attributes.getValue(i); 
     System.out.println(attributes.getLocalName(i) + " : " +  attributes.getValue(i)); 

     //if(attributeValue.toLowerCase().indexOf(timeCheck.toLowerCase()) != -1) 
     // { 
     // System.out.println("Temperature: " + attributes.getValue(i)); 
     // } 
} 

<time datatype="forecast" from="2016-09-08T21:00:00Z" to="2016-09-08T21:00:00Z"> 
    <location altitude="47" latitude="59.3293235" longitude="18.0685808"> 
     <temperature id="TTT" unit="celsius" value="12.0"/> 
     <windDirection id="dd" deg="121.8" name="SE"/> 
     <windSpeed id="ff" mps="2.2" beaufort="2" name="Svak vind"/> 
     <windGust id="ff_gust" mps="3.7"/> 
     <humidity value="80.5" unit="percent"/> 
     <pressure id="pr" unit="hPa" value="1016.0"/> 
     <cloudiness id="NN" percent="51.6"/> 
     <fog id="FOG" percent="-0.0"/> 
     <lowClouds id="LOW" percent="51.2"/> 
     <mediumClouds id="MEDIUM" percent="0.0"/> 
     <highClouds id="HIGH" percent="0.8"/> 
     <dewpointTemperature id="TD" unit="celsius" value="8.8"/> 
    </location> 
Whole XML shown


^私は簡単にそれらの値を持つすべての名前を表示することができますが、私は本当にそれを制御する方法を見つけ出すことはできません。 私が今持っていることのようなユーザ入力節約Stringです:

String timeCheck = "T"+timeUserInput; 

を(私の入力15が、その後TIMECHECKは「T15」になった場合)
と、いくつかの値が、例えば、この入力を取得した場合、私は確認してください

if(attributeValue.toLowerCase().indexOf(timeCheck.toLowerCase()) != -1) 

と本当ならば、私はこのケースでは「12.0」であるが、私は簡単な方法を見つけることができないよう、温度の値を印刷したい:forループ内でこのと「T21」している。私はすべての温度値を印刷することができますが、私は適切な時間の温度値を求めます。

最近、Javaで始まった私の問題を説明してくれました。事前に感謝します!何かの説明が必要な場合は私に教えてくださいと私はしようとします。

+0

どのように解析していますか? XPath?サックス? DOM? JAXB?どのように立ち往生していますか?可能であれば、この質問を改善してください。私の推測では、実際にJAXBを使ってXMLを有効なオブジェクトに変換したいのですが、私は全くわかりません。 –

+0

@HovercraftFullOfEels私はSAXParserを使用しています。私はこの特定の値だけを取得する方法を知らないので、私は立ち往生しています。私はJAXBが何をしているかをチェックします! – Widdin

+0

@HovercraftFullOfEelsこのように:http://imgur.com/PSIF3Zj – Widdin

答えて

0

あなたの目的に合わせて、XPath APIを使用することをお勧めします。これは特定の言語でXMLをクエリします。プログラムは次のようになります:

public void getTemperature(org.w3c.dom.Document doc) 
throws javax.xml.transform.TransformerException, javax.xml.xpath.XPathExpressionException 
{ 
    javax.xml.xpath.XPathFactory xpathFactory=javax.xml.xpath.XPathFactory.newInstance(); 
    javax.xml.xpath.XPath xpath=xpathFactory.newXPath(); 
    String temperature=(String)xpath.evaluate("product/time[contains(@from,'"+timeCheck+"')]/location/temperature/@value", doc, javax.xml.xpath.XPathConstants.STRING); 
} 
関連する問題