먼저 올바른 용어가 아니라면 사용하십시오. 나는 파싱이 어떻게 작동하는지 알아보기 위해 샌프란시스코 BART 시스템에서 XML 피드를 구문 분석하여 UITableView로 이동하고 있습니다. 아래의 간단한 피드를 구문 분석하는 것은 꽤 간단합니다.NSXMLParser를 사용하여 다중 레벨 XML 구문 분석
<?xml version="1.0" encoding="utf-8" ?>
<root>
<uri><![CDATA[ http://api.bart.gov/api/sched.aspx?cmd=special ]]></uri>
<holidays>
<holiday>
<name>New Year's Day (2009)</name>
<date>01/01/2009</date>
<schedule_type>Sunday</schedule_type>
</holiday>
<holiday>
<name>Presidents' Day</name>
<date>02/16/2009</date>
<schedule_type>Saturday</schedule_type>
</holiday>
나는 꽤 확신하고 있습니다. 문제는 이제 다음과 같은 좀 더 복잡한 형식으로 이동했습니다.
는<?xml version="1.0" encoding="utf-8" ?>
<root>
<uri><![CDATA[ http://api.bart.gov/api/etd.aspx?cmd=etd&orig=RICH ]]></uri>
<date>03/30/2011</date>
<time>02:43:27 PM PDT</time>
<station>
<name>Richmond</name>
<abbr>RICH</abbr>
<etd>
<destination>Fremont</destination>
<abbreviation>FRMT</abbreviation>
<estimate>
<minutes>5</minutes>
<platform>2</platform>
<direction>South</direction>
<length>6</length>
<color>ORANGE</color>
<hexcolor>#ff9933</hexcolor>
<bikeflag>1</bikeflag>
</estimate>
<estimate>
<minutes>20</minutes>
<platform>2</platform>
<direction>South</direction>
<length>6</length>
<color>ORANGE</color>
<hexcolor>#ff9933</hexcolor>
<bikeflag>1</bikeflag>
</estimate>
</etd>
<etd>
<destination>Millbrae</destination>
<abbreviation>MLBR</abbreviation>
<estimate>
<minutes>Leaving</minutes>
<platform>2</platform>
<direction>South</direction>
<length>10</length>
<color>RED</color>
<hexcolor>#ff0000</hexcolor>
<bikeflag>1</bikeflag>
</estimate>
</etd>
</station>
<message />
</root>
나는 데 실제 문제는이 더 복잡한 구조이기 때문에 didStart
및 didEnd
방법에 내있는 tableview를 채우는 배열을 구축하는 방법이다. (I 도움을 요청 올 정도로 좌절 도착하기 전에 끝 재판을)은 다음과 내가 위의 각 요소에 대해 별도의 배열을 만드는 것을 이해 꽤 멀리
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
element = elementName;
if ([element isEqualToString:@"station"]) {
station = [[NSMutableDictionary alloc] init];
name = [[NSMutableString alloc] init];
}
if ([element isEqualToString:@"etd"]) {
etd = [[NSMutableDictionary alloc] init];
destination = [[NSMutableString alloc] init];
}
if ([element isEqualToString:@"estimate"]) {
estimate = [[NSMutableDictionary alloc] init];
minutes = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"station"]) {
[station setObject:name forKey:@"name"];
[data addObject:[station copy]];
}
if ([elementName isEqualToString:@"etd"]) {
[etd setObject:destination forKey:@"destination"];
//[data addObject:[etd copy]];
}
if ([elementName isEqualToString:@"estimate"]) {
[estimate setObject:minutes forKey:@"minutes"];
//[data addObject:[estimate copy]];
}
}
올바른
에서 그대로 내가 가지고하는 것입니다. 최종 목표는 역 이름에서 목적지까지 "x 분"으로 출발하는 것입니다. 또한 나는 대부분의 마법이 나를 위해 일어나는 XCODE를 사용하지 않는다. 간단한 XML을 파싱하기위한 많은 튜토리얼이있다. 그래서 다른 구조체를 사용하라는 제안과 함께 간단한 구조와 관련된 많은 질문이있다. 이것들은 나를위한 옵션이 아니며, XCODE 나 IB가없는 순수한 코드로 제한됩니다. 최종 질문은 데이터 구조를 드릴 다운 할 수 있도록 최종 배열을 작성하는 방법입니다.
나는 진술서를 작성하고 최종 배열에 추가 할 새로운 배열을 놓치고 있지만이 시점에서 나는 그것을 구현하는 방법을 잘 모르겠다. 무의미한 어떤 개념도없는 추측 모드에서 여기에 – Chilly
은 .m 파일에 대한 링크입니다. 복사하고자하는 모든 것을하는 방법을 보여줍니다 : 3 –
https://github.com/nicklockwood/XMLDictionary /blob/master/XMLDictionary/XMLDictionary.m –