Objective c 基于元素属性的NSXMLParser解析值

Objective c 基于元素属性的NSXMLParser解析值,objective-c,nsxmlparser,Objective C,Nsxmlparser,我有一个XML示例: <book id="bk101"> <title>XML Developer's Guide</title> </book> <book id="bk102"> <title>Midnight Rain</title> </book> 假设结构XML(如示例中的和标记)没有子元素,并且标记中的文本没有unicode或其他特殊字符。然后,对于id为“bk101”的书籍

我有一个XML示例:

<book id="bk101">
   <title>XML Developer's Guide</title>
</book>
<book id="bk102">
   <title>Midnight Rain</title>
</book>

假设结构XML(如示例中的标记)没有子元素,并且标记中的文本没有unicode或其他特殊字符。然后,对于id为“bk101”的书籍的控制台输出(例如“标题”值),您应该:

  • codeValue
    声明为属性

    @property (strong, nonatomic) NSString *codeValue;
    
  • 更改代码,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    foundCharacters:
    方法,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    didEndElement:
    方法,如下所示(有选择地用于并非所有标记“book”都有属性的情况):

  • 注意:如果文章开头指定的条件不同,您可能需要不同的实现。

    作为替代方案,您可以使用和转换XML(我做了一些更改):


    然后使用它。

    假设结构XML,如示例中的标记没有子元素标记内的文本没有unicode或其他特殊字符。然后,对于id为“bk101”的书籍的控制台输出(例如“标题”值),您应该:

  • codeValue
    声明为属性

    @property (strong, nonatomic) NSString *codeValue;
    
  • 更改代码,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    foundCharacters:
    方法,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    didEndElement:
    方法,如下所示(有选择地用于并非所有标记“book”都有属性的情况):

  • 注意:如果文章开头指定的条件不同,您可能需要不同的实现。

    作为替代方案,您可以使用和转换XML(我做了一些更改):


    然后使用它。

    假设结构XML,如示例中的标记没有子元素标记内的文本没有unicode或其他特殊字符。然后,对于id为“bk101”的书籍的控制台输出(例如“标题”值),您应该:

  • codeValue
    声明为属性

    @property (strong, nonatomic) NSString *codeValue;
    
  • 更改代码,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    foundCharacters:
    方法,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    didEndElement:
    方法,如下所示(有选择地用于并非所有标记“book”都有属性的情况):

  • 注意:如果文章开头指定的条件不同,您可能需要不同的实现。

    作为替代方案,您可以使用和转换XML(我做了一些更改):


    然后使用它。

    假设结构XML,如示例中的标记没有子元素标记内的文本没有unicode或其他特殊字符。然后,对于id为“bk101”的书籍的控制台输出(例如“标题”值),您应该:

  • codeValue
    声明为属性

    @property (strong, nonatomic) NSString *codeValue;
    
  • 更改代码,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    foundCharacters:
    方法,如下所示:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    {
        if ([elementName isEqualToString:@"book"])
        {
          _codeValue = [attributeDict objectForKey:@"id"];
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
      if ([_codeValue isEqualToString:@"bk101"]) 
      {
        NSLog(@"found: %@", string); // output book title here
      }
    }
    
    2013-12-24 13:15:48.167 test[603:70b] {
        books =     {
            book =         (
                            {
                    "-id" = bk101;
                    title = "XML Developer's Guide";
                },
                            {
                    "-id" = bk102;
                    title = "Midnight Rain";
                }
            );
        };
    }
    
  • 添加实现
    didEndElement:
    方法,如下所示(有选择地用于并非所有标记“book”都有属性的情况):

  • 注意:如果文章开头指定的条件不同,您可能需要不同的实现。

    作为替代方案,您可以使用和转换XML(我做了一些更改):


    然后使用它。

    您可以打印AttributedIt吗?您可以打印AttributedIt吗?您可以打印AttributedIt吗?您可以打印AttributedIt吗?