가정 1. p (단락) 요소의 데이터에만 관심이 있으며 NSXMLParser를 사용하고 있습니다.
가정 2. p 내부의 요소를 그대로 유지하려고합니다.
사용할 전략은 데이터를 저장해야 할시기와 수신 할 때 데이터를 무시할시기를 알 수 있도록 파서의 상태 시스템을 만드는 것입니다.
Apple의 샘플 코드를 사용하여 NSXMLParser delegate
을 설정하십시오. 대리인이 데이터를 보관하거나 삭제할 때 추적 할 수 있도록 ivar BOOL inParagraph
이 필요합니다. inParagaph
의 초기 값은 NO
입니다. 대리인이 parser:didStartElement:namespaceURI:qualifiedName:attributes:
메시지, if ([element isEqual:@"p"])
분명 당신의 receivedData
변수를 받아 inParagraph = YES
편집을 설정하면 : receivedData가 인 NSMutableString입니다. 코드 예제가 수정되었습니다
이 시점에서 parser delegate
은받은 데이터를 저장하려고합니다.
메시지가 parser:foundCharacters:
메시지가 나타나면 예제 코드와 같이 receivedData
문자열을 추가하십시오. 파서 인라인 요소를 발견하면
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (inParagraph) [receivedData appendString:string];
}
는 델리게이트 parser:didStartElement:namespaceURI:qualifiedName:attributes:
다시 나타날 것이다. 이것은 inParagraph
상태 변수가 중요한 경우입니다. 파서는 요소의 '<'및 '>'문자를 포함하지 않으므로 elementName
을 '<'및 '>'문자로 묶고 receivedData
에 추가해야합니다.
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{ if (inParagraph)
{
NSString *inlineElementName = [NSString stringWithFormat:@"<%@>", elementName];
[receivedData appendString:inlineElementName];
}
....
}
parser delegate
가 parser:didEndElement:namespaceURI:qualifiedName:
메시지를 수신 같은 것이, 그것의 "P"요소 if (inParagraph && ![elementName isEqual:@"p"]
에 있는지 확인 인라인 요소를 닫는다. if ([elementName isEqual:@"p"])
receivedData
의 내용을 단락이 표시된 NSMutableArray
에 추가하십시오.
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (inParagraph)
{
if (![elementName isEqual:@"p"])
{
NSString *inlineElementName = [NSString stringWithFormat:@"</%@>", elementName];
[receivedData appendString:inlineElementName];
} else { // received closing </p> tag add receivedData to the paragraph array
[paragraphsArray addObject:[receivedData copy]];
[self setInParagraph:NO];
}
}
}
}
서식에 사과드립니다. 편집을 시도했지만 어떤 이유로 오류가 발생합니다. – JWood
user290796 : 코드 블록을 사용해야하는 곳에 인라인 코드 글꼴을 사용하려고했기 때문에. http://daringfireball.net/projects/markdown/syntax를 참조하십시오. –