【发布时间】:2012-09-28 08:14:50
【问题描述】:
<scxml
xmlns="http://www.w3.org/2005/07/scxml"
version="1.0"
profile="ecmascript"
initial="idle">
<state id="idle">
<transition event="mousedown" target="dragging"/>
</state>
<state id="dragging">
<transition event="mouseup" target="idle"/>
<transition event="mousemove" target="dragging"/>
</state>
</scxml>
我想在启动应用程序时解析这个 xml,我进入初始状态“空闲”,然后当我的事件完成时,我想移动下一个状态“拖动”。我该怎么做?
我在以下方法中使用 NSXmlparser。
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"scxml"])
{
stateID = [attributeDict objectForKey:@"initital"];
stateInfo = [[StateInfo alloc]initWithStateName:stateID];
return;
}
if ([elementName isEqualToString: @"state"] ){
if ([[attributeDict objectForKey:@"transition"] isEqualToString:@"idle"]) {
}
else {
}
}
// if ([elementName isEqualToString:@"state"]) {
//// stateID = [attributeDict objectForKey:@"id"];
//// stateInfo = [[StateInfo alloc]initWithStateName:stateID];
//// NSLog(@"stateID = %@",stateID);
// return;
// }
if([elementName isEqualToString:@"transition"]){
//aList=[[List alloc]init];
stateID = [attributeDict objectForKey:@"target"];
targetStateInfo = [[StateInfo alloc]initWithStateName:stateID];
[stateInfo registerNextState:targetStateInfo withCondition:[attributeDict objectForKey:@"cond" ]];
return;
}
if ([elementName isEqualToString:@"scxml"])
{
stateID = [attributeDict objectForKey:@"initital"];
stateInfo = [[StateInfo alloc]initWithStateName:stateID];
return;
}
if ([elementName isEqualToString: @"state"] ){
if ([[attributeDict objectForKey:@"Name"] isEqualToString:@"Child2"]) {
// searchDone=YES;
}
else {
// searchDone=NO;
}
}
// if ([elementName isEqualToString:@"state"]) {
//// stateID = [attributeDict objectForKey:@"id"];
//// stateInfo = [[StateInfo alloc]initWithStateName:stateID];
//// NSLog(@"stateID = %@",stateID);
// return;
// }
if([elementName isEqualToString:@"transition"]){
//aList=[[List alloc]init];
stateID = [attributeDict objectForKey:@"target"];
targetStateInfo = [[StateInfo alloc]initWithStateName:stateID];
[stateInfo registerNextState:targetStateInfo withCondition:[attributeDict objectForKey:@"cond" ]];
return;
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if(!currentElementValue){
currentElementValue=[[NSMutableString alloc]init];
}
[currentElementValue appendString:string];
//currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
/* if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] init];
else
[currentElementValue appendString:string];
*/
/* if(self.currentElementValue) { [self.currentElementValue appendString:string]; } */ }
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"scxml"])
return;
if([elementName isEqualToString:@"state"]){
//[aList setTitle:currentElementValue];
//NSLog(@"alist.title = %@",aList.title);
}
currentElementValue = nil;
}
【问题讨论】:
-
向我们展示代码,你能修复它吗?当你开始状态事件时,你可以检查它是“空闲”还是“拖动”对吗?
-
如果您能向您展示代码或类似代码会更好,这将有助于我们了解您的确切要求。
-
你在使用任何 xml 解析器吗?
-
@AppleDelegate 是的,我正在使用 NsXmlparser
-
@vishy 我正在更新我的问题
标签: iphone ios5 xml-parsing