我一直在寻找大约两个小时,现在试图找出这个错误是什么以及如何解决它.Apple的文件很高兴地说
NSXMLParserAttributeNotStartedError属性未启动.适用于Mac OS X v10.3及更高版本.在NSXMLParser.h中声明.
但没有提供任何帮助.有人可以帮我从这里出去吗?非常感谢任何朝着正确方向的推动.
在viewDidLoad中,我有:
NSURL *xmlUrl = [NSURL fileURLWithPath:xmlFilepath];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlUrl];
[xmlParser setDelegate:self];
[xmlParser setShouldResolveExternalEntities:NO];
BOOL success = [xmlParser parse];
Run Code Online (Sandbox Code Playgroud)
获取xml没问题,我可以成功读取直到根元素,然后它就会中断.
其余的相关代码如下:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"foo"]) {
foo = [[NSMutableArray alloc] init];
} else if([elementName isEqualToString:@"bar"]) {
bar = [[Bar alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(NSString *)type defaultValue:(NSString *)defaultValue {
if ([elementName isEqualToString:@"bar"]) {
if ([attributeName isEqualToString:@"barAttrib1"]) …Run Code Online (Sandbox Code Playgroud) 我正在学习如何NSXMLParser在iOS平台上使用API,到目前为止它非常易于使用.但是,我在foundCharacters方法中遇到了一个小问题.据我所知,它不应该拾取任何空格,因为该foundIgnorableWhitespace方法应该捕获它,但它看起来像.这是我的代码......
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//We're at the start of a new data feed
if([elementName isEqualToString:@"data"])
{
if(listOfTimes != nil)
[listOfTimes release];
listOfTimes = [[NSMutableArray alloc] init];
}
else if ( [elementName isEqualToString:@"start-valid-time"]) {
currentElementType = kXMLElementTime;
return;
}
else {
currentElementType = kXMLElementOther;
}
//---------------------------------------------------------------------
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(currentElementType == kXMLElementTime)
{
//We don't want anymore than three times
if ([listOfTimes count] >= 3) …Run Code Online (Sandbox Code Playgroud) 我必须使用XML文件,但我没有得到所有项目,因为我的导航器中显示的此错误在文件内容之前.确切的错误是:
此页面包含以下错误:
第10行第4099行的错误:PCDATA无效字符值11以下是直到第一个错误的页面呈现.
我该怎么办 ?谢谢你的建议.
<root>
<table name="radios">
<column name="nameradio">Radio1</column>
<column name="logo">http://app.syndicationradio.fr/demo/logo1.png</column>
<column name="stream">http://cloud2.syndicationradio.fr:8020</column>
<column name="twitter">http://www.twitter.com/#syndicationradio</column>
<column name="facebook">http://www.facebook.com/syndicationradio</column>
<column name="titre">http://app.syndicationradio.fr/demo/title.xml</column>
</table>
<table name="radios">
<column name="nameradio">Radio2</column>
<column name="logo">http://app.syndicationradio.fr/demo/logo1.png</column>
<column name="stream">http://cloud2.syndicationradio.fr:8020</column>
<column name="twitter">http://www.twitter.com/#syndicationradio</column>
<column name="facebook">http://www.facebook.com/syndicationradio</column>
<column name="titre">http://app.syndicationradio.fr/demo/title.xml</column>
</table>
</root>
Run Code Online (Sandbox Code Playgroud)
现在请有人帮忙了解一下,如何在IOS中使用NSXMLParser或者任何其他xml解析器从xml数据中获取这些url TBXML?
编辑:你也可以给我libxml这个xml解析器的例子.
提前致谢.
我有一个使用内部声明的实体的XML文件.例如:
<?xml version="1.0" encoding="UTF-8"?>
...
<!ENTITY my_symbol "my symbol value">
...
<my_element>
<my_next_element>foo&my_symbol;bar</my_next_element>
</my_element>
...
Run Code Online (Sandbox Code Playgroud)
使用NSXMLParser类,我如何解析my_symbol实体引用?
从实验中,parser:foundInternalEntityDeclarationWithName:value:将为my_symbol具有值的实体声明调用委托方法"my symbol value".然后,当到达my_next_element元素时,NSXMLParser将调用parser:didStartElement:namespaceURI:qualifiedName:attributes:委托方法.
在parser:didEndElement:namespaceURI:qualifiedName:调用之前</my_next_element>,parser:foundCharacters:将使用字符串调用委托方法两次:
"foo""bar"该my_symbol实体引用被忽略.为了解析实体引用需要什么?
编辑:
从DTD中删除ENTITY声明my_symbol将导致NSXMLParserUndeclaredEntityError.这表明当实体声明存在,然后引用时<my_next_element>,它就会被注意到.出于某种原因,它只是没有被解析为它所代表的字符串.
此外,如果&在元素中使用,则解析器将正确地将其解析为,"&"并且在parser:foundCharacters:调用委托方法时将其作为字符串传递.
我最近一直在玩iPhone应用程序的代码来解析XML.坚持Cocoa,我决定使用NSXMLParser类.该应用程序将负责解析10,000多个"计算机",所有这些计算机都包含6个其他信息串.对于我的测试,我已经验证了XML的大小约为900k-1MB.
我的数据模型是通过唯一标识符将每台计算机保存在NSDictionary中.每台计算机也由NSDictionary代表信息.因此,在一天结束时,我最终得到一个包含10k其他NSDictionaries的NSDictionary.
我遇到的问题不是泄漏内存或高效的数据结构存储.当我的解析器完成后,分配的对象总量只会增加大约1MB.问题是当NSXMLParser运行时,我的对象分配高达13MB.我能理解2(一个用于我正在创建的对象,一个用于原始NSData)加上一个小工作空间,但13似乎有点高.我无法想象NSXMLParser效率低下.思考?
码...
开始解析的代码......
NSXMLParser *parser = [[NSXMLParser alloc] initWithData: data];
[parser setDelegate:dictParser];
[parser parse];
output = [[dictParser returnDictionary] retain];
[parser release];
[dictParser release];
Run Code Online (Sandbox Code Playgroud)
而解析器的委托代码......
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if(mutableString)
{
[mutableString release];
mutableString = nil;
}
mutableString = [[NSMutableString alloc] init];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(self.mutableString)
{
[self.mutableString appendString:string];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"size"]){
//The initial key, tells me how many …Run Code Online (Sandbox Code Playgroud) 我正在使用解析xml文档的NSXMLParser.您必须设置每次解析器找到元素时我们将调用的委托.我看过的例子都将委托设置为创建的同一个类:
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:filename];
[parser setDelegate: self];
Run Code Online (Sandbox Code Playgroud)
其他示例将委托设置为父级.如果我想要另一个类(与同一个类无关)来处理委托,该怎么办?这样做的语法是什么?
我做到了这一点,但它不起作用.
@interface Util : NSObject <NSXMLParserDelegate> {
//Some code here
}
//functions for the delegate and the implementation on the Util.m
//.
//.
//.
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答.
我忘了说在调用代表时我假设它会是这样的:
[parser setDelegate:Util];
Run Code Online (Sandbox Code Playgroud)
我认为这知道要为同一个类设置委托,消息是:
[parser setDelegate:self];
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个NSXMLParser并调用其委托方法.在将代表设置为self(下面的第2行)时,我收到警告Sending 'XMLParserViewController *' to a parameter of incompatible type 'id <NSXMLParserDelegate>'.我在这里缺少什么?
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
[parser setDelegate:self];
[parser parse];
[parser release];
Run Code Online (Sandbox Code Playgroud) 我正在使用NSXMLParser来解析RSS提要.早些时候我正在使用来自cdata块的图片网址,但现在我遇到了一个内部有图片网址的Feed
<media:content url="http://cdn.example.com/wp-content/uploads/2013/10/article-2462931-18C5CBC000000578-776_634x452.jpg" medium="image"/>
Run Code Online (Sandbox Code Playgroud)
如何从此标记中选择图像网址?这是我想在didStartElement方法中使用但它无法正常工作:
if ([elementName isEqual:@"media:content"])
{
currentString = [[NSMutableString alloc] init];
// Basically i need the image url string at this point
NSString *imageURLString = [self getFirstImageUrl:currentString];
imageURL = [NSURL URLWithString:imageURLString];
[self downloadThumbnails:imageURL];
}
Run Code Online (Sandbox Code Playgroud)
如何从媒体内容标签中选择图片网址字符串?谢谢!
我在NSXMLParser中崩溃了
*因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因是:'NSXMLParser不支持可重入解析.'
这是我的代码
NSString *wrappedSnippet = [NSString stringWithFormat:@"<html>%@</html>", self.snippet];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[wrappedSnippet dataUsingEncoding:NSUTF8StringEncoding]];
[parser setDelegate:self];
[parser parse];
Run Code Online (Sandbox Code Playgroud)
应用程序在最后一行崩溃.
请注意,iOS7上的一切都很完美!
nsxmlparser ×10
iphone ×5
ios ×4
xml ×4
objective-c ×3
cocoa ×2
ipad ×2
cocoa-touch ×1
debugging ×1
delegates ×1
evernote ×1
ios8 ×1
parsing ×1
pcdata ×1
rss ×1