parsingXML HttpResponse

我试图parsingXML HttpResponse我从一个HttpPost到一个服务器(last.fm),为一个last.fm android应用程序。 如果我简单地parsing它的string我可以看到它是一个正常的XMLstring,所有所需的信息。 但我只是不能分析单个NameValuePairs。 这是我的HttpResponse对象:

HttpResponse response = client.execute(post); HttpEntity r_entity = response.getEntity(); 

我尝试了两种不同的东西,其中没有一个能够工作 首先,我试图检索NameValuePairs:

 List<NameValuePair> answer = URLEncodedUtils.parse(r_entity); String name = "empty"; String playcount = "empty"; for (int i = 0; i < answer.size(); i++){ if (answer.get(i).getName().equals("name")){ name = answer.get(i).getValue(); } else if (answer.get(i).getName().equals("playcount")){ playcount = answer.get(i).getValue(); } } 

在这个代码之后,名字和playcount保持“空”。 所以我试图使用XMLparsing器:

 DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document answer = db.parse(new DataInputStream(r_entity.getContent())); NodeList nl = answer.getElementsByTagName("playcount"); String playcount = "empty"; for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); Node fc = n.getFirstChild(); playcount Url = fc.getNodeValue(); } 

这似乎失败得多,因为它甚至没有设置playcountvariables。 但就像我说的,如果我这样做:

 EntityUtils.toString(r_entity); 

我会得到一个完美的XMLstring。 所以它应该没有问题,因为HttpResponse包含正确的信息。 我究竟做错了什么?

Solutions Collecting From Web of "parsingXML HttpResponse"

我解决了它。 DOM XMLparsing器需要更多的调整:

  HttpResponse response = client.execute(post); HttpEntity r_entity = response.getEntity(); String xmlString = EntityUtils.toString(r_entity); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); InputSource inStream = new InputSource(); inStream.setCharacterStream(new StringReader(xmlString)); Document doc = db.parse(inStream); String playcount = "empty"; NodeList nl = doc.getElementsByTagName("playcount"); for(int i = 0; i < nl.getLength(); i++) { if (nl.item(i).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { org.w3c.dom.Element nameElement = (org.w3c.dom.Element) nl.item(i); playcount = nameElement.getFirstChild().getNodeValue().trim(); } } 

这是一个非常好的教程 ,从一个饲料parsingXML。 您可以使用它来构build更强大的应用程序,这些应用程序需要parsingXML Feed,我希望这有助于

if(answer.get(i).getName()==“name”){

你不能使用==来比较一个string

当我们使用==运算符时,我们实际上是比较两个对象引用,看他们是否指向同一个对象。 例如,我们不能使用==运算符来比较两个string是否相等。 我们必须使用.equals方法,它是由java.lang.Object的所有类inheritance的方法。

这是比较两个string的正确方法。

  String abc = "abc"; String def = "def"; // Bad way if ( (abc + def) == "abcdef" ) { ...... } // Good way if ( (abc + def).equals("abcdef") ) { ..... } 

从十大Java程序员的错误取得