- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚 NSXMLParser,但我不确定为什么它不起作用。我应该输出名字和姓氏以及年龄,但它输出的是一个数字。
XML 是
<?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>
在我的 AppDelegate.m 中有
#import "AppDelegate.h"
#import "XMLElement.h"
@interface AppDelegate () <NSXMLParserDelegate>
@property (nonatomic, strong) NSXMLParser *xmlParser;
@property (nonatomic, strong) XMLElement *rootElement;
@property (nonatomic, strong) XMLElement *currentElementPointer;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"MyHTML"
ofType:@"HTML"];
NSData *xml = [[NSData alloc] initWithContentsOfFile:xmlFilePath];
self.xmlParser = [[NSXMLParser alloc] initWithData:xml];
self.xmlParser.delegate = self;
if ([self.xmlParser parse]){
NSLog(@"The XML is parsed.");
/* self.rootElement is now the root element in the XML */
XMLElement *element = self.rootElement.subElements[1];
NSLog(@"%@", element.subElements);
} else{
NSLog(@"Failed to parse the XML");
}
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (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{
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{
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{
self.currentElementPointer = self.currentElementPointer.parent;
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
self.currentElementPointer = nil;
}
在我的 XMLElement 类中是
#import "XMLElement.h"
@implementation XMLElement
- (NSMutableArray *) subElements{
if (_subElements == nil){
_subElements = [[NSMutableArray alloc] init];
}
return _subElements;
}
@end
这是我的问题
2013-11-21 15:59:53.216 XML[7595:70b] 解析 XML。2013-11-21 15:59:53.219 XML[7595:70b] (“XML元素:0x8d61200”,“XML元素:0x8d61270”,“XMLElement:0x8d612e0”)2013-11-21 15:59:53.223 XML[7595:70b] 应用程序窗口预计在应用程序启动结束时有一个 Root View Controller
我想得到
2013-11-21 15:59:53.216 XML[7595:70b] 解析 XML。2013-11-21 15:59:53.219 XML[7595:70b] (“XMLElement:理查德”,“XMLElement:布兰森”,“XML元素:61”)2013-11-21 15:59:53.223 XML[7595:70b] 应用程序窗口预计在应用程序启动结束时有一个 Root View Controller
最佳答案
这是你设置它的方式:
#import "XMLElement.h"
@implementation XMLElement
- (NSMutableArray *) subElements {
if (_subElements == nil){
_subElements = [[NSMutableArray alloc] init];
}
return _subElements;
}
- (NSString *)description {
return [NSString stringWithFormat:"XMLElement: %@", self.text];
}
@end
关于ios - NSXMLParser 输出 "XMLElement: 0x8d61200"但想要 "XMLElement: Richard",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197255/
我在 NSXMLParser 中崩溃了 * Terminating app due to uncaught exception 'NSInternalInconsistencyException',
我有 NSXMLParser 问题,我尝试了 iOS8 NSXMLParser crash这个话题,但我真的没有得到解决方案。 我正在创建另一个 NXSMLParser 委托(delegate)并将其
我目前正在尝试使用外部已解析实体引用来解析包含另一个 XML 的 XML。但是,NSXMLParser 会引发错误,而不是解析包含的 XML。 xml 看起来有点像这样: ]>
我正在使用 NSXMLParser 来解析此 XML:http://itunes.apple.com/gb/rss/topsongs/limit=50/explicit=true/xml 。我正在尝试
NSXMLParser 是什么样的解析器? 是 dom 解析器还是 sax 解析器。 有多少个解析器? 最佳答案 它是一个 SAX 解析器。有许多可用于 iOS 的 DOM XML 解析器,我见过的最
我有以下泄漏的代码。 Instruments 表示,泄漏的是 rssParser 对象。我“刷新”了 XML 提要,它运行了该 block 并且发生了泄漏...... 文件.h @interface
如何将本地路径传递给NSXMLParser 像这样 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:storeP
我使用从互联网获取的可变数据初始化 NSXMLParser。我想知道解析器是否在释放时释放它,或者我必须在解析后释放它? 谢谢 最佳答案 Cocoa 使用“这不是我的问题”来比喻内存管理。 如果将某些
我有以下 XML(为 iPhone 开发一个应用程序): 00070431 John Doe ... 如何仅检索其中一个属性的值,例如属性 name="given_name"的值“John”? 感
下面是 MREntitiesConverter 对象的 @interface,我使用 NSXMLParser 从字符串中剥离所有 html 标签。 @interface MREntitiesConve
我想编写一个 NSXMLParser,我在 NSString(已编码)中有数据。 如果我将 NSString 放入 NSLog,它会给出我需要的正确行。但是,当我想使用来自 NSString 的数据启
这与我之前的问题类似。我没有得到答案,也许通过改变问题我可能会得到答案。 这是我的解析代码: -(void) parser:(NSXMLParser *) parser didStartElemen
我正在尝试解析一些简单的东西,但我不知道该怎么做..我已经解析了之前有一些 xml,但这个结构没有任何内容,所以我有点迷失。 这是 xml。
我正在我的应用程序中解析 XML 文件,最奇怪的事情发生了。它在多个元素之后停止,没有完成该元素,但解析方法仍然返回成功。我感觉某个地方有一个错误的角色,但无法弄清楚。有谁知道为什么它在解析过程中停止
我想解析 [description] [p] blah blah [/description] [/p] 中包含的描述 Jon Greene named associate director
我正在尝试从 xml 网络源获取内容列表。我正在使用 NSXMLParser atm。 代码如下: - (void)main { self.workingArray = [NSMutableA
我有这样的xml数据 dendritical Empty மரம
我刚刚阅读了一个关于 nsxmlparsing 的不同问题的答案。其中有人说你应该使用 self。更好的内存管理符号...这是什么意思? 我在初始化字典时遗漏了这个,我应该把它放进去吗?它有多大帮助或
我在 XML 中有一行包含 % 符号。但是 NSXMLParser 也改变了一些数字,如下所示 2013-11-16 01:08:07.102 ECP[46386:a0b] string is Inc
我正在尝试解析一个 xml 文件(下面的链接)以获取所有带有标签的文本。我能够做到这一点,但解析器忽略了以破折号 (-) 结尾的行并仅将其替换为破折号(请参见下面的示例),并且一些带有说话标记的说话标
我是一名优秀的程序员,十分优秀!