我只想得到城市和温度,我试过这个:
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();
}
但是res将是
#text
#text
...
摘要25x。我怎样才能得到城市和温度值?
答案 0 :(得分:3)
这里正确的做法是实际使用Xpath。您在使用Regex或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());
}
}
}
答案 1 :(得分:0)
尝试getTextContent()而不是getNodeValue()
答案 2 :(得分: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();
}