0
嗨我有一個非常奇怪的問題我有xml文件惠特21個元素,我想將它們添加到可變數組。分析器11次啓動元素,11次foundCharacters但只有10次結束元素它的行爲就像它結束了xml文件一樣。我的程序不會崩潰,它應該運行,但它有時會使它讀取所有21個元素。 爲什麼?NsXmlParser不能正常工作
我的一些代碼部分:
/*this function start work whith xml file*/
- (void)parseXMLFile:(NSData *)adatok {
if (adatok != nil) {
BOOL success;
if (addressParser)
[addressParser release];
addressParser = [[NSXMLParser alloc] initWithData:adatok];
[addressParser setDelegate:self];
[addressParser setShouldResolveExternalEntities:YES];
success = [addressParser parse];
}
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
NSLog(elementName);
if ([elementName isEqualToString:@"turnover"]) {
objektObrat =[[Obrat1 alloc] init];
NSString *sth = [attributeDict objectForKey:@"transid"];
objektObrat.uID = sth;
}
if ([elementName isEqualToString:@"amount"]) {
osuma=YES;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
//filling the object which will be saved in database
NSLog(string);
if (osuma) {
osuma=NO;
objektObrat.suma = [[NSString alloc] initWithString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(elementName);
if ([elementName isEqualToString:@"turnover"]) {
turnOver = NO;
oid = NO;
if (objektObrat != Nil){
[obratDatabaseArray addObject:objektObrat];
[objektObrat release];
}
//add to array
[array addObject:vypisObratString];
}
if ([elementName isEqualToString:@"amount"]) {
osuma=NO;
}
}
我希望它能幫助,至少有一個關鍵,我應該尋找問題 感謝
XML
<!ELEMENT turnovers (turnover*)>
<!ELEMENT turnover (amount, maturity-date, trans-date, counter-prefix, counter-account, counter-bank, counter-name, constant-symb, variable-symb, spec-symb, description, note, type, storno, rate, balance, currency, statement, message1, message2)> - detail obratu
<!ATTLIST turnover transid CDATA #REQUIRED>
<!ELEMENT amount (#PCDATA)> - suma
<!ELEMENT maturity-date (#PCDATA)> - dátum operácie
<!ELEMENT trans-date (#PCDATA)> - dátum transakcie
<!ELEMENT counter-prefix (#PCDATA)> - predčíslo protiúčtu
<!ELEMENT counter-account (#PCDATA)> - číslo protiúčtu
<!ELEMENT counter-bank (#PCDATA)> - kód banky
<!ELEMENT counter-name (#PCDATA)> - názov protiúčtu
<!ELEMENT constant-symb (#PCDATA)> - konštantný symbol
<!ELEMENT variable-symbol (#PCDATA)> - variabilný symbol
<!ELEMENT spec-symb (#PCDATA)> - špecifický symbol
<!ELEMENT constant-symb (#PCDATA)> - konštantný symbol
<!ELEMENT note (#PCDATA)> - poznamka
<!ELEMENT type (#PCDATA)> - typ obratu pozri číselník typy obratov v prílohe č. 1).
<!ELEMENT storno (#PCDATA)> - či je storno
<!ELEMENT rate (#PCDATA)> - kurz
<!ELEMENT balance (#PCDATA)> - zostatok
<!ELEMENT currency (#PCDATA)> - mena
<!ELEMENT statement (#PCDATA)> - číslo výpisu
<!ELEMENT message1 (#PCDATA)> - message 1
<!ELEMENT message2 (#PCDATA> - message 2
更多相關代碼將有所幫助。另外,你的XML文檔是用什麼語言編寫的? – 2011-02-07 11:57:28
好的我在utf-8中使用它,我應該從代碼中粘貼什麼? – Csabi 2011-02-07 12:06:15