4

私は xml を持っています: http://netmobileag.accu-weather.com/widget/netmobileag/weather-data.asp?slat=48.04960&slon=21.71420&metric=1

都市と気温を取得したいだけです。これを試しました:

HttpParams httpParameters = new BasicHttpParams();

HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpGet httpget = new HttpGethttp://netmobileag.accu weather.com/widget/netmobileag/weather-data.asp?slat=48.04960&slon=21.71420&metric=1");

HttpResponse response = httpclient.execute(httpget);

InputStream in = response.getEntity().getContent();

String res = "";

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(in));
doc.getDocumentElement().normalize();

NodeList loc = doc.getElementsByTagName("local");

for (int i = 0; i < loc.item(0).getChildNodes().getLength(); i++) {
    res = res + "\n" + loc.item(0).getChildNodes().item(0).getNodeValue();
}

しかし、解像度は

#text
#text
 ...

要約 25x。都市と気温の値を取得するにはどうすればよいですか?

4

3 に答える 3

3

ここで行う正しいことは、実際にXpathを使用することです。正規表現またはSQLを使用してデータベースを検索しますか?ここでも同じですが、XMLファイルの検索はXPathを介して行われます。

 package xpath;

 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathFactory;

 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;

 public class SimpleParsing {
public static void main(String[] args) throws Exception {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(false); // never forget this!
    DocumentBuilder builder = factory.newDocumentBuilder();

    Document doc = builder.parse("/Users/eugenrabii/Desktop/MyFile.xml");

    XPathFactory xPathFactory = XPathFactory.newInstance();
    XPath xpath = xPathFactory.newXPath();

    XPathExpression xPathExpression = xpath.compile("//city/text()");

    Object result = xPathExpression.evaluate(doc, XPathConstants.NODESET);

    System.out.println(result.toString());

    NodeList nodes = (NodeList) result;

    System.out.println(nodes.getLength());
    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue()); 
    }
}

}

于 2012-08-03T18:36:26.740 に答える
0

以下のコードを試してください

HttpParams httpParameters = new BasicHttpParams();

HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpGet httpget = new HttpGethttp://netmobileag.accu weather.com/widget/netmobileag/weather-data.asp?slat=48.04960&slon=21.71420&metric=1");

HttpResponse response = httpclient.execute(httpget);

InputStream in = response.getEntity().getContent();

String res = "";

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(in));
doc.getDocumentElement().normalize();

NodeList loc = doc.getElementsByTagName("local");

for (int i = 0; i < loc.item(0).getChildNodes().getLength(); i++) {
    res = res + "\n" + loc.item(0).getChildNodes().item(0).getTextContent();
}
于 2012-08-03T18:16:28.717 に答える
0

getNodeValue() の代わりに getTextContent() を試してください

于 2012-08-03T18:13:28.903 に答える