11.12. Parsing XML with NSXMLParser
2014-06-27 09:35
357 查看
Step1:自己写个XMLElement类
.h文件
#import <Foundation/Foundation.h>
@interface XMLElement :
NSObject
@property (nonatomic,
copy) NSString *name;
@property (nonatomic,
copy) NSString *text;
@property (nonatomic,
copy) NSDictionary *attributes;
@property (nonatomic,
strong) NSMutableArray *subElements;
@property (nonatomic,
weak) XMLElement *parent;
@end
.m文件
#import "XMLElement.h"
@implementation XMLElement
- (NSMutableArray *) subElements{
if (_subElements ==
nil){
_subElements = [[NSMutableArray
alloc] init];
}
return
_subElements;
}
-(NSString*)description
{
NSMutableString * desc = [NSMutableString
stringWithFormat:@"<%@",self.name];
[self.attributes
enumerateKeysAndObjectsUsingBlock:^(id key,
id obj,
BOOL *stop) {
[desc
appendFormat:@" %@=%@",key,obj];
}];
[desc
appendString:@">"];
if (self.text) {
[desc
appendFormat:@"%@",self.text];
}
[_subElements
enumerateObjectsUsingBlock:^(id obj,
NSUInteger idx, BOOL *stop) {
[desc
appendFormat:@"%@",obj];
}];
[desc
appendFormat:@"</%@>",self.name];
return desc;
}
@end
step2:声明解析类,实现代理
#import "XMLElement.h"
@interface
ViewController ()<NSXMLParserDelegate>
@property (nonatomic,
strong) NSXMLParser *xmlParser;
@property (nonatomic,
strong) XMLElement *rootElement;
@property (nonatomic,
strong) XMLElement *currentElementPointer;
@end
step3:解析过程
- (IBAction)buttonAction:(id)sender {
NSString * xmlStr =
@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><person id=\"1\"> <firstName>Anthony</firstName> <lastName>Robbins</lastName> <age>51</age></person><person id=\"2\"> <firstName>Richard</firstName> <lastName>Branson</lastName> <age>61</age></person></root>";
NSData * xmlData = [xmlStr
dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *xmlParser = [[NSXMLParser
alloc] initWithData:xmlData];
xmlParser.delegate =
self;
if ([xmlParser parse]) {
NSLog(@"The XML is parsed.rootElement=%@",self.rootElement);
}
else{
NSLog(@"Failed to parse the XML");
}
}
- (void)parserDidStartDocument:(NSXMLParser *)parser{
self.rootElement =
nil;
self.currentElementPointer =
nil;
}
- (void) parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
NSLog(@"%s",__FUNCTION__);
NSLog(@"elementName=%@ namespaceURI=%@ qName=%@ attributeDict=%@",elementName,namespaceURI,qName,attributeDict);
if (self.rootElement ==
nil){
/* We don't have a root element. Create it and point to it */
self.rootElement = [[XMLElement
alloc]
init];
self.currentElementPointer =
self.rootElement;
}
else {
/* Already have root. Create new element and add it as one of
the subelements of the current element */
XMLElement *newElement = [[XMLElement
alloc] init];
newElement.parent =
self.currentElementPointer;
[self.currentElementPointer.subElements
addObject:newElement];
self.currentElementPointer = newElement;
}
self.currentElementPointer.name = elementName;
self.currentElementPointer.attributes = attributeDict;
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"%s",__FUNCTION__);
NSLog(@"%@",string);
if ([self.currentElementPointer.text
length] >
0){
self.currentElementPointer.text = [self.currentElementPointer.text
stringByAppendingString:string];
}
else {
self.currentElementPointer.text = string;
}
}
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
NSLog(@"%s",__FUNCTION__);
NSLog(@"elementName=%@ namespaceURI=%@ qName=%@",elementName,namespaceURI,qName);
self.currentElementPointer =
self.currentElementPointer.parent;
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
self.currentElementPointer =
nil;
}
打印:
2014-06-27 09:29:40.078 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.079 cookbook7[349:a0b] elementName=root namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.080 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.080 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null) attributeDict={
id = 1;
}
2014-06-27 09:29:40.081 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.081 cookbook7[349:a0b]
2014-06-27 09:29:40.081 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.082 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.082 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.083 cookbook7[349:a0b] Anthony
2014-06-27 09:29:40.083 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.084 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.084 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.084 cookbook7[349:a0b]
2014-06-27 09:29:40.085 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.085 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.086 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.086 cookbook7[349:a0b] Robbins
2014-06-27 09:29:40.087 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.087 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.087 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.088 cookbook7[349:a0b]
2014-06-27 09:29:40.088 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.089 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.089 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.089 cookbook7[349:a0b] 51
2014-06-27 09:29:40.090 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.090 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.091 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.091 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.091 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.092 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null) attributeDict={
id = 2;
}
2014-06-27 09:29:40.092 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.093 cookbook7[349:a0b]
2014-06-27 09:29:40.093 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.094 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.094 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.094 cookbook7[349:a0b] Richard
2014-06-27 09:29:40.095 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.095 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.096 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.096 cookbook7[349:a0b]
2014-06-27 09:29:40.096 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.097 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.097 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.098 cookbook7[349:a0b] Branson
2014-06-27 09:29:40.098 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.098 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.099 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.099 cookbook7[349:a0b]
2014-06-27 09:29:40.100 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.100 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.100 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.101 cookbook7[349:a0b] 61
2014-06-27 09:29:40.101 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.102 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.102 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.103 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.103 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.103 cookbook7[349:a0b] elementName=root namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.104 cookbook7[349:a0b] The XML is parsed.rootElement=<root><person id=1> <firstName>Anthony</firstName><lastName>Robbins</lastName><age>51</age></person><person id=2>
<firstName>Richard</firstName><lastName>Branson</lastName><age>61</age></person></root>
.h文件
#import <Foundation/Foundation.h>
@interface XMLElement :
NSObject
@property (nonatomic,
copy) NSString *name;
@property (nonatomic,
copy) NSString *text;
@property (nonatomic,
copy) NSDictionary *attributes;
@property (nonatomic,
strong) NSMutableArray *subElements;
@property (nonatomic,
weak) XMLElement *parent;
@end
.m文件
#import "XMLElement.h"
@implementation XMLElement
- (NSMutableArray *) subElements{
if (_subElements ==
nil){
_subElements = [[NSMutableArray
alloc] init];
}
return
_subElements;
}
-(NSString*)description
{
NSMutableString * desc = [NSMutableString
stringWithFormat:@"<%@",self.name];
[self.attributes
enumerateKeysAndObjectsUsingBlock:^(id key,
id obj,
BOOL *stop) {
[desc
appendFormat:@" %@=%@",key,obj];
}];
[desc
appendString:@">"];
if (self.text) {
[desc
appendFormat:@"%@",self.text];
}
[_subElements
enumerateObjectsUsingBlock:^(id obj,
NSUInteger idx, BOOL *stop) {
[desc
appendFormat:@"%@",obj];
}];
[desc
appendFormat:@"</%@>",self.name];
return desc;
}
@end
step2:声明解析类,实现代理
#import "XMLElement.h"
@interface
ViewController ()<NSXMLParserDelegate>
@property (nonatomic,
strong) NSXMLParser *xmlParser;
@property (nonatomic,
strong) XMLElement *rootElement;
@property (nonatomic,
strong) XMLElement *currentElementPointer;
@end
step3:解析过程
- (IBAction)buttonAction:(id)sender {
NSString * xmlStr =
@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><person id=\"1\"> <firstName>Anthony</firstName> <lastName>Robbins</lastName> <age>51</age></person><person id=\"2\"> <firstName>Richard</firstName> <lastName>Branson</lastName> <age>61</age></person></root>";
NSData * xmlData = [xmlStr
dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *xmlParser = [[NSXMLParser
alloc] initWithData:xmlData];
xmlParser.delegate =
self;
if ([xmlParser parse]) {
NSLog(@"The XML is parsed.rootElement=%@",self.rootElement);
}
else{
NSLog(@"Failed to parse the XML");
}
}
- (void)parserDidStartDocument:(NSXMLParser *)parser{
self.rootElement =
nil;
self.currentElementPointer =
nil;
}
- (void) parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
NSLog(@"%s",__FUNCTION__);
NSLog(@"elementName=%@ namespaceURI=%@ qName=%@ attributeDict=%@",elementName,namespaceURI,qName,attributeDict);
if (self.rootElement ==
nil){
/* We don't have a root element. Create it and point to it */
self.rootElement = [[XMLElement
alloc]
init];
self.currentElementPointer =
self.rootElement;
}
else {
/* Already have root. Create new element and add it as one of
the subelements of the current element */
XMLElement *newElement = [[XMLElement
alloc] init];
newElement.parent =
self.currentElementPointer;
[self.currentElementPointer.subElements
addObject:newElement];
self.currentElementPointer = newElement;
}
self.currentElementPointer.name = elementName;
self.currentElementPointer.attributes = attributeDict;
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"%s",__FUNCTION__);
NSLog(@"%@",string);
if ([self.currentElementPointer.text
length] >
0){
self.currentElementPointer.text = [self.currentElementPointer.text
stringByAppendingString:string];
}
else {
self.currentElementPointer.text = string;
}
}
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
NSLog(@"%s",__FUNCTION__);
NSLog(@"elementName=%@ namespaceURI=%@ qName=%@",elementName,namespaceURI,qName);
self.currentElementPointer =
self.currentElementPointer.parent;
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
self.currentElementPointer =
nil;
}
打印:
2014-06-27 09:29:40.078 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.079 cookbook7[349:a0b] elementName=root namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.080 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.080 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null) attributeDict={
id = 1;
}
2014-06-27 09:29:40.081 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.081 cookbook7[349:a0b]
2014-06-27 09:29:40.081 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.082 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.082 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.083 cookbook7[349:a0b] Anthony
2014-06-27 09:29:40.083 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.084 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.084 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.084 cookbook7[349:a0b]
2014-06-27 09:29:40.085 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.085 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.086 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.086 cookbook7[349:a0b] Robbins
2014-06-27 09:29:40.087 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.087 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.087 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.088 cookbook7[349:a0b]
2014-06-27 09:29:40.088 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.089 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.089 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.089 cookbook7[349:a0b] 51
2014-06-27 09:29:40.090 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.090 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.091 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.091 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.091 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.092 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null) attributeDict={
id = 2;
}
2014-06-27 09:29:40.092 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.093 cookbook7[349:a0b]
2014-06-27 09:29:40.093 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.094 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.094 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.094 cookbook7[349:a0b] Richard
2014-06-27 09:29:40.095 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.095 cookbook7[349:a0b] elementName=firstName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.096 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.096 cookbook7[349:a0b]
2014-06-27 09:29:40.096 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.097 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.097 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.098 cookbook7[349:a0b] Branson
2014-06-27 09:29:40.098 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.098 cookbook7[349:a0b] elementName=lastName namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.099 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.099 cookbook7[349:a0b]
2014-06-27 09:29:40.100 cookbook7[349:a0b] -[ViewController parser:didStartElement:namespaceURI:qualifiedName:attributes:]
2014-06-27 09:29:40.100 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null) attributeDict={
}
2014-06-27 09:29:40.100 cookbook7[349:a0b] -[ViewController parser:foundCharacters:]
2014-06-27 09:29:40.101 cookbook7[349:a0b] 61
2014-06-27 09:29:40.101 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.102 cookbook7[349:a0b] elementName=age namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.102 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.103 cookbook7[349:a0b] elementName=person namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.103 cookbook7[349:a0b] -[ViewController parser:didEndElement:namespaceURI:qualifiedName:]
2014-06-27 09:29:40.103 cookbook7[349:a0b] elementName=root namespaceURI=(null) qName=(null)
2014-06-27 09:29:40.104 cookbook7[349:a0b] The XML is parsed.rootElement=<root><person id=1> <firstName>Anthony</firstName><lastName>Robbins</lastName><age>51</age></person><person id=2>
<firstName>Richard</firstName><lastName>Branson</lastName><age>61</age></person></root>
相关文章推荐
- [iPhone]XML文件解析 parsing-xml-files NSXMLParser
- JDOM Example : Reading and Parsing XML with SAX parser in Java
- [转载][iPhone]XML文件解析 parsing-xml-files NSXMLParser
- [iPhone]XML文件解析 parsing-xml-files NSXMLParser
- A coroutine example: Streaming XML parsing using xml_parser
- Parsing XML with XmlPull_(MyMoviesWithHttpClient)
- Tutorial: Loading and parsing external XML and JSON files with Unity
- Android: Simplified source code for parsing and working with XML data and web services in Android
- JAVA:Parsing, Modifying, and outputting XML Documents with Java
- Parsing XML from the Net - Using the SAXParser
- hibernate启动Warning parsing XML: /hibernate.cfg.xml(1) URI was not reported to parser for entity [doc
- pugixml Light-weight, simple and fast XML parser for C++ with XPath support
- iOS 【网端数据解析 JSON(MJExtension)& XML(NSXMLParser/GDataParser)】
- Parsing web.config with XmlDocument.SelectSingleNode
- Parsing XML Files with SAX
- Validating With the XML Parser
- 介绍两种常用的XML解析方式(NSXMLParser & GDataXMLNode)
- Parser exception for xx/AndroidManifest.xml: The reference to entity "z" must end with the ';' delim
- Parsing XML Files with PowerShell
- iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)