2

からxmlを解析しようとしています

http://free.worldweatheronline.com/feed/weather.ashx?key=14d7241962022903123108&q=ペンシルバニア州ピッツバーグ

必要なのは、タグ「weatherDesc」からの天気の説明の文字列だけです

私が試してみました

    URL url = new URL("http://free.worldweatheronline.com/feed/weather.ashx?key=14d7241962022903123108&q=Pittsburgh,pa.xml");
    URLConnection conn = url.openConnection();

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(conn.getInputStream());

weatherDesc を選択するには何を追加する必要がありますか?

4

2 に答える 2

1

単一の要素の値だけが必要な場合はjavax.xml.xpath、JDK/JREに含まれているAPIを使用することをお勧めします。例については、以下を参照してください。

于 2012-08-31T19:58:34.893 に答える
1

SAXこれにはパーサーまたはパーサーを使用してくださいDOM.......

XML 形式の天気情報について、 SAX パーサーの実例を示します。parsing

主な活動:

public class WhetherXMLParsingAppActivity extends Activity {

    EditText editCity;
    EditText editState;
    TextView textCurrW;
    Button showButt;
    HandlingXmlStuff doingWork;


    final String baseURL ="http://www.google.com/ig/api?weather=";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        editCity = (EditText)findViewById(R.id.edit_City);
        editState = (EditText)findViewById(R.id.edit_State);
        textCurrW = (TextView)findViewById(R.id.text_CurrWhether);
        showButt = (Button)findViewById(R.id.button_Show);

        showButt.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                 String c = editCity.getText().toString();
                 String s = editCity.getText().toString();

                 StringBuilder URL = new StringBuilder(baseURL);
                 URL.append( c + "," + s);

                 String fullURL = URL.toString();


                 try {
                    URL website = new URL(fullURL);
                     SAXParserFactory spf = SAXParserFactory.newInstance();
                     SAXParser sp = spf.newSAXParser();
                     XMLReader xr = sp.getXMLReader();
                     doingWork = new HandlingXmlStuff();
                     xr.setContentHandler(doingWork);
                     xr.parse(new InputSource(website.openStream()));

                     String endResult = doingWork.getInfo();

                     textCurrW.setText(endResult);
                } catch (Exception e) {
                         textCurrW.setText("Error");
                } 



            }
        });

    }
}

XML 処理クラス:

public class HandlingXmlStuff extends DefaultHandler{

    XmlDataCollected xdc = new XmlDataCollected();
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        super.startElement(uri, localName, qName, attributes);

        if (localName.equals("city")) {
        String city = attributes.getValue("data");
        xdc.setCity(city);

        }else if (localName.equals("temp_f")) {

            String t = attributes.getValue("data");
            int temp = Integer.parseInt(t);
            xdc.setTemp(temp);


        }


    }
    public String getInfo() {

        return xdc.dataToString();
    }



}

データ処理クラス:

public class XmlDataCollected {

    private int temp;
    private String city;


    public void setTemp(int temp) {

        this.temp = temp;

    }

    public void setCity(String city) {

        this.city = city;
    }


    public String dataToString() {

        return "In " + city + " the Temperature in Farenheit is " + temp + " degress ";

    }


}
于 2012-08-31T17:35:41.293 に答える