gpt4 book ai didi

iphone - 如何在iPhone中解析多个.xml文件?

转载 作者:行者123 更新时间:2023-12-03 19:43:43 25 4
gpt4 key购买 nike

这是我第一次使用 xml,所以如果我的问题质量很低,请不要对我严厉。我正在开发一个应用程序,我可以使用服务器上的 xml 文件检索所有数据。

在这里发布问题之前,我读了一些Tutorials关于xml文件解析。但是当我开始在我的应用程序中实现它时,当我尝试解析第二个 Xml 文件等时,我完全感到困惑。

现在我想使用一些屏幕截图来解释我的应用程序流程,以便每个人都可以轻松实现我想要的内容。

  1. First view
  2. Second view
  3. Third view

现在,当我单击第一个 View 中的任何行时,它会转到第二个 View 并在第二个 View 中显示所有相关数据,当我单击第二个 View 中的任何项目时,它会转到第三个 View 并显示有关该特定项目的详细信息。

解释了应用程序流程后,现在我将展示我迄今为止尝试过的代码。按照教程,我只需将类(XMLParser、Book)拖到我的应用程序中以进行测试。

代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = [[NSURL alloc] initWithString:@"Firstviewxmlurl"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
XMLParser *parser = [[XMLParser alloc] initXMLParser];
[xmlParser setDelegate:parser];
BOOL success = [xmlParser parse];
if(success)
NSLog(@"No Errors");
else
NSLog(@"Error Error Error!!!");
}

现在我的 XMLParser.m 代码是

- (XMLParser *) initXMLParser {

[super init];

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:@"Collections"]) {
//Initialize the array.
appDelegate.books = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Collection"]) {

//Initialize the book.
aBook = [[Book alloc] init];

//Extract the attribute here.
aBook.bookID = [[attributeDict objectForKey:@"id"] integerValue];

NSLog(@"Reading id value :%i", aBook.bookID);
}

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:@"Collections"])
return;
if([elementName isEqualToString:@"Collection"]) {
[appDelegate.books addObject:aBook];

[aBook release];
aBook = nil;
}
else
[aBook setValue:currentElementValue forKey:elementName];

[currentElementValue release];
currentElementValue = nil;
}

最后我的第一个 View 类代码是

    #pragma mark Table Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//return [tblViewData count];
return [appDelegate.books count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell.selectionStyle=UITableViewCellSelectionStyleGray;
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
}
//cell.textLabel.text=[[tblViewData objectAtIndex:indexPath.row]
// stringByReplacingOccurrencesOfString:@"*" withString:@""];
Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];

cell.textLabel.text = aBook.title;

if([deviceType isEqualToString:@"ipad"])
{
[cell.textLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:20]];
}
//cell.textLabel.font=[UIFont fontWithName:@"Walkway_SemiBold" size:16];
return cell;
}

执行上述所有代码后,我得到了 this 形式的结果现在,我很困惑如何传递第二个 View xml 文件 url,然后传递第三个 View url。我的 xml 文件采用这种格式

第一个 xml 文件

 <?xml version="1.0" encoding="UTF-8"?>
<Collections> <Collection id="5"><title>Allegroo</title> </Collection>

第二个 xml 文件

 <?xml version="1.0" encoding="UTF-8"?>
<Collection id="5"><colletciontitle>Allegroo</colletciontitle> <weaveimage>"imageurl" </weaveimage><Rug id="48"><Rugthumb>"firstimageurl"</Rugthumb><RugSku>AL-637</RugSku></Rug><Rug id="51"><Rugthumb>"Secondimageurl"</Rugthumb><RugSku>AL-641</RugSku></Rug>

第三个 xml 文件

  <?xml version="1.0" encoding="UTF-8"?>
<Rug id="47"><Rugmainimage>"imageurl"</Rugmainimage> <Rugtitle>AL-636 Aged Indigo / Vintage Beige</Rugtitle> <Rugdiscription>Hand Knotted
Distressed Wool Pile / Cotton Foundation </Rugdiscription><Availablesizes><Size>10x14</Size><Size>12x15</Size><Size>2x3</Size><Size>3x5</Size><Size>4x6</Size><Size>6x9</Size><Size>8x10</Size><Size>9x12</Size><Runner>2'6"x10'</Runner><Runner>2'6"x12'</Runner><Runner>2'6"x8'</Runner></Availablesizes></Rug>

任何与我的问题和建议相关的链接或示例代码形式的帮助都将受到高度赞赏。谢谢

最佳答案

嗯,那么定义长话短说,您想按顺序解析多个网址吗?

所以这就是答案,

  1. 在 appDelegate 中使用变量/标识符来告诉您正在解析哪个 xml。
  2. 使用您的 xml 解析器作为委托(delegate)类对象
  3. 使用委托(delegate)方法切换到下一个xml解析

     - (void)parserDidEndDocument:(NSXMLParser *)parser {
    // Change URL accordingly
    NSURL *url = [[NSURL alloc] initWithString:@"Firstviewxmlurl"];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    XMLParser *parser = [[XMLParser alloc] initXMLParser];
    [xmlParser setDelegate:parser];
    BOOL success = [xmlParser parse];
    }

关于iphone - 如何在iPhone中解析多个.xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com