我的問題很簡單。我正在解析XML,解析過程在NSXML中非常好。我把所有的聲音都放在了一些數組中,現在我正在用這個組合一個字符串。我的問題是,如果我寫這樣的XML ...Objective-C - 讀取新行的NSXML我不會
<main>
<introductions>
<text>Text 01</text>
<text>Text 02</text>
</introductions>
</main>
...我追加2串在我獲得故事板標籤:
Text 01
Text 02
我試着找出在新線是從哪裏來的,所以我嘗試了一些東西,我發現這個XML ...
<main>
<introductions>
<text>Text 01</text> <text>Text 02</text>
</introductions>
</main>
... ...產生
Text 01 Text 02
這是爲什麼?爲什麼NSXML正在讀取標籤之外的內容?我怎樣才能避免這種情況?
如果它可以幫助,這就是我初始化解析器:
NSURL *xml = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"frasi" ofType:@"xml"]];
xmlParser = [[NSXMLParser alloc] initWithData:[NSData dataWithContentsOfURL:xml]];
[xmlParser setDelegate:self];
[xmlParser setShouldProcessNamespaces:NO];
[xmlParser setShouldReportNamespacePrefixes:NO];
[xmlParser setShouldResolveExternalEntities:NO];
[xmlParser parse];
這是代碼的其餘部分(我真正的XML):
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([currentElement isEqualToString:@"introduzioni"] || [currentElement isEqualToString:@"soggetti"]
|| [currentElement isEqualToString:@"verbi"] || [currentElement isEqualToString:@"luoghi"]){
++depth;
//[self showCurrentDepth];
NSLog(@"Sezione %@", elementName);
sezione = [[NSString alloc] init];
sezione = currentElement;
}
else if ([currentElement isEqualToString:@"testo"]){
currentName = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"introduzioni"] || [elementName isEqualToString:@"soggetti"]
|| [elementName isEqualToString:@"verbi"] || [elementName isEqualToString:@"luoghi"]){
--depth;
//[self showCurrentDepth];
}
else if ([elementName isEqualToString:@"testo"]){
if (depth == 1){
NSLog(@"Testo: %@", currentName);
if([sezione isEqualToString:@"introduzioni"])
[arrayIntroduzioni addObject:currentName];
if([sezione isEqualToString:@"soggetti"])
[arraySoggetti addObject:currentName];
if([sezione isEqualToString:@"verbi"])
[arrayVerbi addObject:currentName];
if([sezione isEqualToString:@"luoghi"])
[arrayLuoghi addObject:currentName];
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"testo"]){
[currentName appendString:string];
}
}
給我們看一些代碼。如何添加文本值以及如何閱讀它們 – Lefteris 2012-04-19 09:34:57
@Lefteris:這非常困難,因爲它有很多代碼,並且XML只是爲我的問題特製的一個示例。我不得不再次更改所有代碼以適合它。我可以向你保證解析是好的。我只是使用「stringAppendByString」附加字符串,並在更改XML時改變行爲,但我預料不到。這就是問題......順便說一句,我會嘗試添加一些可能幫助你的代碼。 – 2012-04-19 09:42:49
阿爾貝託你可以猜測,我們更難以在沒有代碼的情況下幫助你。只是向我們展示了代碼片段,而不是整個代碼 – Lefteris 2012-04-19 09:47:12