为啥这不能正确解析?

Posted

技术标签:

【中文标题】为啥这不能正确解析?【英文标题】:Why does this not parse correctly?为什么这不能正确解析? 【发布时间】:2013-08-12 03:43:30 【问题描述】:

好吧,基本上,我正在尝试解析一个子元素:

<element>
   <sub element 1>
   <sub element 2>
   <sub element 3>
<element>

我要解析的当前原始文档包含如下示例: 子元素内容1:AB, CD, DE, &amp; SOMETHING DISPLAYED.

我只抢到了&amp; SOMETHING DISPLAYED。我无法解析整个子元素。

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

currentNodeContent = (NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
//NSLog(@"CURRENT CONTENT: %@", currentNodeContent);

这是第一个问题。我遇到的第二个问题是上面提到的应该有 11 个项目。但它只设法抓住了 2 件物品。请注意,每个项目都包含子元素,除了一些子元素是null

Issues has been added: (null)-(null)-(null)
Issues has been added: sub-element-1 sub-element2 sub-element3

下面是didEndElement的一部分:

if ([elementName isEqualToString:@"Issue"]) 
    //add currentIssue object into issues array
    [issues addObject:currentIssue];
    NSLog(@"Issues has been added: %@-%@-%@", currentIssue.sub-element-1, currentIssue.sub-element-2, currentIssue.sub-element-3);
    currentIssue = nil;
    currentNodeContent = nil;

if ([elementName isEqualToString:@"sub element 1"]) 
    currentIssue.sub-element-1 = currentNodeContent;
    NSLog(@"sub element 1: %@", currentIssue.sub-element-1);

if ([elementName isEqualToString:@"sub element 2"]) 
    currentIssue.sub-element-2 = currentNodeContent;
    NSLog(@"sub element 2: %@", currentIssue.sub-element-2);

if ([elementName isEqualToString:@"sub element 3"]) 
    currentIssue.sub-element-3 = currentNodeContent;
    NSLog(@"sub element 3: %@", currentIssue.sub-element-3);

非常感谢您的意见和/或建议。

更新 1: 好的,我已经解决了这个问题。

似乎“currentIssue = nil”会导致对象丢失其内容,因为我能够打印出 currentNodeContent。

因此,通过删除 currentIssue,我现在能够看到我需要的所有假定元素。

但是还有一个问题。我现在可以看到所有子元素,但只剩下一个子元素被部分抓取,我不明白为什么。

【问题讨论】:

为什么在变量中包含连字符(例如sub-element-1)?也为您的elementNamesub-element-i-want-3 != sub element 3 请原谅我。我很着急。请编辑。 你为什么不自己NSLogelementName 因为我可以看到elementNames,我只是不明白为什么它不能抓取值。 :) 无论如何,我已经解决了这个问题。 :) 【参考方案1】:

对于 &lt;sub element 1&gt;sub element 1 不是 elementName 。元素名称为sub

【讨论】:

【参考方案2】:
- (XMLParserViewController *) initXMLParser 


    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    return self;


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict 


    if([elementName isEqualToString:@"Books"]) 
        appDelegate.books = [[NSMutableArray alloc] init];
    
    else if([elementName isEqualToString:@"Book"])
    

        aBook = [[Books alloc] init];

    

    NSLog(@"Processing Element: %@", elementName);


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 

    if(!currentElementValue)
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        [currentElementValue appendString:string];

    NSLog(@"Processing Value: %@", currentElementValue);



- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 

    if([elementName isEqualToString:@"Books"])
        return;

    if([elementName isEqualToString:@"Book"])
    
       [appDelegate.books addObject:aBook];        
          aBook = nil;
    
    else if([elementName isEqualToString:@"name"])
    
        aBook.name=currentElementValue;
    
    else if([elementName isEqualToString:@"address"])
    
        aBook.address=currentElementValue;
    
    else if([elementName isEqualToString:@"country"])
    
        aBook.country=currentElementValue;
            

    currentElementValue = nil;


    NSLog(@"%@",aBook.name);
    NSLog(@"%@",aBook.address);
    NSLog(@"%@",aBook.country);

用你的元素试试这个代码希望这对你有用.... :)

【讨论】:

【参考方案3】:

好的,我已经解决了这个问题。

似乎“currentIssue = nil”会导致对象丢失其内容,因为我能够打印出 currentNodeContent。

因此,通过删除 currentIssue,我现在能够看到我需要的所有假定元素。

其次,为了使其正常工作,我在“parserDidStartDocument”而不是“parserDidStartElement”下初始化了数组。

【讨论】:

以上是关于为啥这不能正确解析?的主要内容,如果未能解决你的问题,请参考以下文章

域名解析后网站为啥还不能访问

这不能正确切换[重复]

为啥直接输入ip地址不能访问

为啥我不能在 java 中使用 SimpleDateFormat 得到正确的年份?

谁能告诉我为啥这不是创建一个正方形? [复制]

我用的php+sql+apache集成环境,我能直接用IP访问域名A解析但是发现有时候用域名不能访问为啥??