Parsing from URL with NSXMLParser



我正在制作一个应用程序,应该从URL解析XML文件。

现在,我只想知道基本的东西是如何工作的。我知道你可能看起来很简单,但作为一个新手,有些东西仍然很难理解,但我已经做了一些简单的应用程序。

虽然我已经看了NSXMLParserDelegate协议,我不知道如何使用这些例子…

我想从这个URL解析:

http://jpg.tartu.ee/tunniplaan/xml/periood1.xml

我也看了其他问题在同一主题,但我不能找出这些解决方案,他们不是我正在寻找的。因此,我问了一个具体的问题。

注意:您提供的链接不起作用。考虑一个简单的例子:

<Class>
  <Student>
    <Name>John Snow</Name>
  </Student>
  <Student>
    <Name>Harvey Specter</Name>
  </Student>
</Class>

- (void)viewDidLoad{
      NSURL *url = [[NSURL alloc]initWithString:@"yourURL"];
      NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
      [parser setDelegate:self];
      BOOL result = [parser parse];
}
// Following methods are the NSXMLParser delegate methods :
- (void)parserDidStartDocument:(NSXMLParser *)parser{
   //Document Starts...
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
   //Document Ends...
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    //This method detects a tag(eg. <Name>)
    NSLog(@"Did start element");
    if ( [elementName isEqualToString:@"Name"]){
    NSLog(@"name tag");
    // set current tag as "Name" tag
    return;
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    // if current tag is Name
   if([currentTag isEqualToString:@"Name"]){
       //Take text, JohnSnow or HarveySpecter
       NSString *text = string;
   }
}
 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
   // Detects end of tag.(eg. </Name>)
    NSLog(@"Did end element");
    if ([elementName isEqualToString:@"Name"]){
          NSLog(@"Name end");
          // Do what's necessary..
        }
   // set current tag as nil
}

注:还可以通过解析xml动态创建视图。也就是说,如果检测到"button"标签(如上面的"Name"),则可以创建一个UIButton(框架和按钮标题可以在xml中提供)。类似UILabel, textField.

将委托添加到视图控制器:

class ViewController: UIViewController, NSXMLParserDelegate {

然后用xml解析url:

let url = NSURL(string: "http://jpg.tartu.ee/tunniplaan/xml/periood1.xml")
let xmlParser = NSXMLParser(contentsOfURL: url!)!
xmlParser.delegate = self
xmlParser.parse()

还添加了用于解析的委托函数(我已经添加了一个如何将元素名称打印到控制台的示例)。

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
    print("Element's name is (elementName)")
}

请注意,因为您的xml是通过http而不是https访问的,您可能会遇到错误。我首先建议您将服务器切换到使用https,但为了快速测试,您可以在info.plist中添加一些东西,使其通过http工作。

最新更新