2011-11-25 3 views
0

URL에서 Android에서 XML을 구문 분석하는 데 문제가 있습니다. 이 문제의 또는 단지 내가android에서 DOM을 사용하여 XML을 구문 분석 할 수 없습니다.

setListAdapter(new ArrayAdapter<String>(ANDROIDXMLActivity.this, android.R.layout.simple_list_item_1, stopNumbers)); 

늘 아무것도 보여 있기 때문에 화면에 표시하려고 할 때 XML 파싱 있는지 모르겠어요. 아래의 코드는 자바 프로그램에서 완벽하게 작동합니다.

URL은 : http://maps.travelsouthyorkshire.com/iGNMSearchService.asmx/FindObjectsWithinExtent?xMin=435360&yMin=387260&xMax=435960&yMax=387860&zoomLevel=0

try { 
     ArrayList<Double> xCords = new ArrayList<Double>(); 
     ArrayList<Double> yCords = new ArrayList<Double>(); 
     ArrayList<String> stopNumbers = new ArrayList<String>(); 
     ArrayList<String> bussLocations = new ArrayList<String>(); 
     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
     Document doc = docBuilder 
       .parse(new URL(
         "http://maps.travelsouthyorkshire.com/iGNMSearchService.asmx/FindObjectsWithinExtent?xMin=435360&yMin=387260&xMax=435960&yMax=387860&zoomLevel=0") 
         .openStream()); 

     // normalize text representation 
     doc.getDocumentElement().normalize(); 
     NodeList listOfObjects = doc.getElementsByTagName("iGNMObject"); 
     for (int s = 0; s < listOfObjects.getLength(); s++) { 
      Node firstPersonNode = listOfObjects.item(s); 

      if (firstPersonNode.getNodeType() == Node.ELEMENT_NODE) { 

       Element firstPersonElement = (Element) firstPersonNode; 
       NodeList stopNumList = firstPersonElement 
         .getElementsByTagName("StopNumber"); 
       Element ageElement = (Element) stopNumList.item(0); 
       if (ageElement != null) { 
        NodeList textAgeList = ageElement.getChildNodes(); 

        String stop = ((Node) textAgeList.item(0)) 
          .getNodeValue().trim(); 
        stopNumbers.add(stop); 

        // ------ 
        // ------- 
        NodeList xPosList = firstPersonElement 
          .getElementsByTagName("XPosition"); 
        Element firstNameElement = (Element) xPosList.item(0); 
        NodeList textFNList = firstNameElement.getChildNodes(); 

        String temp2 = ((Node) textFNList.item(0)) 
          .getNodeValue().trim(); 
        double x = Double.parseDouble(temp2); 
        xCords.add(x); 

        // ------- 
        NodeList yPosList = firstPersonElement 
          .getElementsByTagName("YPosition"); 
        Element lastNameElement = (Element) yPosList.item(0); 
        NodeList textLNList = lastNameElement.getChildNodes(); 
        String temp3 = ((Node) textLNList.item(0)) 
          .getNodeValue().trim(); 
        double y = Double.parseDouble(temp3); 
        yCords.add(y); 

        // ---- 

        NodeList stopAkaList = firstPersonElement 
          .getElementsByTagName("StopAka"); 
        Element stopAka = (Element) stopAkaList.item(0); 
        NodeList textStopAKAList = stopAka.getChildNodes(); 
        String plats = ((Node) textStopAKAList.item(0)) 
          .getNodeValue().trim(); 
        bussLocations.add(plats); 
       } else { 

       } 

      }// end of if clause 
     }// end of for loop with s var 

     setListAdapter(new ArrayAdapter<String>(ANDROIDXMLActivity.this, 
       android.R.layout.simple_list_item_1, stopNumbers)); 

    } catch (Exception e) { 

    } 

} 

} }

+0

stopNumbers.add ("2")는 무엇을 의미합니까? 디버깅 할 때이 코드 줄을 건너 뛰는가? – Jack

+0

"1"과 "2"가 목록에 추가되지만 나머지는 포함되지 않습니다. – Carlj901

+0

이 코드를 단계별로 디버깅하여 무슨 일이 발생했는지 확인 했습니까? 내 생각 엔 listOfObjects.size() == 0 또는 뭔가. – Jack

답변

0

를 해결. 매니페스트에 인터넷 사용 권한을 추가하는 것을 잊어 버렸습니다.

+1

시스템에서 허용하는 경우이를 허용으로 표시하는 것을 잊지 마십시오. 또한이 대답에 대해 좀 더 자세히 설명해 주시겠습니까? –

+0

글쎄, 응용 프로그램은 URL 권한에 액세스 할 수 없으므로 권한이 없습니다. 이로 인해 프로그램은 XML url을 읽지 않고 예외를 잡아 내 목록을 null로 남겨두고 아무것도 화면에 표시하지 않았습니다. – Carlj901

+0

athor는 자신의 응용 프로그램이 AndroidManifext.xml의 인터넷 권한을 통해 인터넷에 액세스하는 것을 허용하지 않았습니다. 이 질문은 XML 파싱과 관련이 없습니다. 응용 프로그램에는 구문 분석 할 XML이 없습니다. 코드 조각의 끝 부분에있는 끔찍한 예외 처리 때문일 수 있습니다. –

관련 문제