-3

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

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

我要解析的当前原始文档包含如下示例: sub-element-content1: AB, CD, DE, & SOMETHING DISPLAYED

我只好抓住了& 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,我现在能够看到我需要的所有假定元素。

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

4

3 回答 3

2

对于<sub element 1>sub element 1不是elementName。元素名称是sub

于 2013-08-12T04:30:45.523 回答
0
- (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);
}

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

于 2013-08-12T04:33:23.427 回答
0

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

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

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

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

于 2013-08-13T02:59:10.120 回答