내 현재 응용 프로그램에서 XML 파싱 꽤 해봤이 this example되어 많은 도움이되었다.
현명한 디자인 나는 토스트 나 인 텐트 방송 대신에 초창기 XML 요소에서 Parse 객체를 인스턴스화 할 사용자 정의 SAX 핸들러를 사용해야합니다. 이 객체는 XML 항목을 나타냅니다. 그래서 오브젝트가 Car 일 것이고 Door, Color, Wheels에 setter/getter가있을 것입니다. SAX 파서의 데이터를 파싱하면 해당 값이 설정됩니다. SAX 파서가 파싱을 마쳤을 때 파서가 객체를 XML의 모든 자동차로 가득 찬 액티비티로 되돌려 보내도록 호출합니다. 내 경우에는 실제로 반환되는 내 개체의 목록/배열을 채 웁니다. 이 예제는 한 세트의 데이터만을 처리합니다. 어쨌든 그 링크는 그것을 모두 설명합니다.
편집 : 사실 내 처리기에서 수행하는 작업은 getParsedData()를 통해 구문 분석 후 활동으로 전달되는 내 ParsedData 세트 개체 배열을 작성하는 것입니다.여기에 중요한 코드의 일부는 다음과 같습니다
XML 처리기 :
private boolean in_IdSite;
private boolean in_SiteName;
private ArrayList<ParsedChannelDataSet> list = new ArrayList<ParsedChannelDataSet>();
public ArrayList<ParsedChannelDataSet> getParsedData() {
return this.list;
}
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
// first tag parsed so add a new ParsedEventDataSet object
if(localName.equals("stmSiteUser")) {
list.add(new ParsedChannelDataSet());
} else if (localName.equals("idSite")) {
this.in_IdSite = true;
} else if (localName.equals("siteName")) {
this.in_SiteName = true;
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
if (localName.equals("idSite")) {
this.in_IdSite = false;
} else if (localName.equals("siteName")) {
this.in_SiteName = false;
}
}
@Override
public void characters(char ch[], int start, int length) {
// determine if any tag is current, get data from tag and populate into ParsedEventDataSet
if (this.in_IdSite) {
this.list.get(this.list.size()-1).setExtractedIdSite(new String(ch, start, length));
} else if (this.in_SiteName) {
this.list.get(this.list.size()-1).setExtractedSiteName(new String(ch, start, length));
}
}
여기 분명히 다른 너무 뭔가적인 siteName 및 idSite를 교체하려면 (이 당신이 원하는대로 호출 할 수 있습니다) 내 샘플 ParsedDataSampleSet입니다. 이들은 단지
public class ParsedChannelDataSet {
private String extractedIdSite = null;
private String extractedSiteName = null;
public String getExtractedIdSite() {
return extractedIdSite;
}
public void setExtractedIdSite(String _extractedIdSite) {
this.extractedIdSite = _extractedIdSite;
}
public String getExtractedSiteName() {
return extractedSiteName;
}
public void setExtractedSiteName(String _extractedSiteName) {
Log.d("", _extractedSiteName);
this.extractedSiteName = _extractedSiteName;
}
public String toString() {
/* TODO */
return "todo";
}
}
그래서 당신은 내가 다시 활동에 전달되는 ParsedChannelDataSet 객체의 배열을 구축 볼 수 있습니다 내 XML 요소입니다. 이것은 토스트 나 브로드 캐스트를 사용하는 것보다 훨씬 더 좋은 해결책입니다. 더 분리 된 솔루션이기 때문에 더 편리합니다.
편집 2 : 사이트의이 두 번째 페이지에있는 첫 번째 게시물에서 광산과 같은 여러 XML 요소를 구문 분석하는 것에 대해 언급했습니다. 여기 (parse multiple xml elements)를 참조하십시오.
나는 이것이 당신이 활동에 등록 된 수신기 안드로이드 방송 의도 것이 설명하는 방법을 사용 제가 이해 한 내용을 아이폰 OS 억양 통지에서
이전에이 예를 보았지만 간단히 살펴 보았습니다. 나는 아마도이 접근법으로 갈 것이다. 감사! – networkprofile
방금 샘플 코드를 추가했습니다. 실제로이 예제가 수행하지 않는 핸들러 내에서 구문 분석 된 객체 배열을 실제로 구현했습니다. – wired00
정확하게'ParsedChannelDataSet'이 무엇인지, Google에서 그것에 대해 아무 것도 찾을 수 없습니다. 또한 정확히 여기에 무엇이 들어 있습니까? 'list.add (new ParsedChannelDataSet()); 또는'단지'stmSiteUser' 또는 무엇인가를 세고 있습니까? – networkprofile