我使用NSXMLParser来解析服务器的XML文档.它们编码为UTF8.我的问题是,NSXMLParser在变音符号(ä,ö,ü)中断并启动一个新元素.
例如:
Lösen - NSXMLParser ---> L +ösen
我如何让NSXMLParser像其他任何单词一样完整地阅读我的变音单词.
问候
NSXMLParserInvalidCharacterError#9
这是我在遇到一个奇怪的角色时得到的错误(比如复制并从单词粘贴到网络表单的引号,最终在Feed中).我正在使用的Feed没有给出编码,他们没有希望让他们改变它.这是我在标题中得到的全部内容:
<?xml version ="1.0"?> <rss version ="2.0">
解析Feed时,我该怎么办非法字符?我在解析之前扫描数据吗?我在API中缺少什么?有人处理过这个问题吗?
这里让我困惑的是:
NSXMLParser方法具有namespaceURI属性:
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
Run Code Online (Sandbox Code Playgroud)
从文档中我无法弄清楚它们的意思是"命名空间".有人可以用一个例子来解释XML中的命名空间是什么以及我为什么要这样做?
编辑:是的,我注意到维基百科.但它又令人困惑.将一个单独的名称空间声明放在XML文件的顶部是有意义的
xmlns:xhtml="http://www.w3.org/1999/xhtml"
Run Code Online (Sandbox Code Playgroud)
?? 再一次,这只是毫无意义.维基百科没有任何有用的例子可以获得它,为什么我真的想要名称空间,更重要的是 - 它在XML文件中看起来如何.他们说这是为了解决多个同名元素(如ID)的歧义,但没有例子说明多个命名空间如何解决这个问题.
我的应用程序有一个问题,它采用XML提要,解析它,并将结果存储到Core Data中.
问题仅发生在应用程序的第一次运行时,当商店中没有任何内容并且整个订阅源被解析和存储时.问题只是内存分配累积起来,直到50%的尝试崩溃应用程序,通常大约10Mb.分配的对象似乎是CFData(存储)对象,我似乎无法找到任何强制释放它们的方法.如果你可以让它运行一次并成功完成解析并保存到核心数据,那么每次后续启动都没问题,内存使用量永远不会超过2.5Mb
这是我们进入代码之前的一般方法:将feed添加到NSData对象中.使用NSFileManager将其存储为文件.从文件路径创建URL并将其提供给parseXMLFile:方法.代表是自我.在到达解析器时:didStartElement:namespaceURI:qualifiedName:attributes:我创建一个字典来捕获我需要的标签中的数据.解析器:foundCharacters:方法将标记的内容保存到字符串解析器:didEndElement:...方法然后确定标记是否是我们需要的东西.如果是这样的话,它会将它添加到字典中,否则它会忽略它.一旦它到达项目的末尾,它就会调用一种方法将其添加到核心数据存储中.
通过查看示例代码和其他人发布的帖子,似乎一般方法中没有任何错误.
代码如下,它来自视图控制器的更大上下文,但我省略了任何不直接相关的内容.
就我已经尝试的事情而言:feed是XML,没有转换为JSON的选项,抱歉.这不是在共享文档区域中找到并存储的图像.
关于它可能是什么的线索:这是我从Instruments获得的最大数量最多的东西(每件256k):
对象地址类别创建时间实时大小负责图书馆负责人
1 0xd710000 CFData(store)16024774912•262144 CFNetwork URLConnectionClient :: clientDidReceiveData( _CFData const*,URLConnectionClient :: ClientConnectionEventQueue*)
这是代码,为内容的匿名编辑;)
-(void)parserDidStartDocument:(NSXMLParser *)feedParser { }
-(void)parserDidEndDocument:(NSXMLParser *)feedParser { }
-(void)parser:(NSXMLParser *)feedParser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
eachElement = elementName;
if ( [eachElement isEqualToString:@"item" ] )
{
//create a dictionary to store each item from the XML feed
self.currentItem = [[[NSMutableDictionary alloc] init] autorelease];
}
}
-(void)parser:(NSXMLParser *)feedParser foundCharacters:(NSString *)feedString
{
//Make sure that tag content doesn't …Run Code Online (Sandbox Code Playgroud) 我正在使用NSXMLParser来解析从我的webservice中获取的数据.但是当我从服务器获取数据时.
它给了我错误代码5.
我无法看到来自Web服务的响应.
我用
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:theURL];
Run Code Online (Sandbox Code Playgroud)
但是当我写作时,我无法在控制台中看到响应 NSLog(@"%@",parser);
如何显示从我的Web服务获得的响应?
我正在使用NSXMLParser,我得到一个指向NSConcreteMapTable的内存泄漏,无论是什么:

从我的AppDelegate.m调用解析器时,在这行代码中发生泄漏:

我找了一个解决方案,看不出我做错了什么.这是我的代码.任何帮助是极大的赞赏.LQ
// * * * XMLParser.h * * *
#import <Foundation/Foundation.h>
@protocol NSXMLParserDelegate;
@interface XMLParser : NSObject
<NSXMLParserDelegate>
{
NSMutableArray *xmlArray;
BOOL storingCharacters;
float xmlDataVersion;
}
@property (nonatomic, retain) NSMutableArray *xmlArray;
@property (nonatomic) BOOL storingCharacters;
@property (nonatomic, assign) float xmlDataVersion;
-(BOOL)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error;
@end
// * * * XMLParser.m * * *
#import "XMLParser.h"
@implementation XMLParser
@synthesize xmlArray;
@synthesize storingCharacters;
@synthesize xmlDataVersion;
- (BOOL)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error {
BOOL result = YES;
if (xmlArray == nil) { …Run Code Online (Sandbox Code Playgroud) 我是新手,我正在尝试阅读RSS提要,到目前为止一切都很好.我是这样做的:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"item"]) {
[item setObject:currentTitle forKey:@"title"];
[item setObject:currentLink forKey:@"link"];
[item setObject:currentSummary forKey:@"summary"];
[item setObject:currentDate forKey:@"date"];
[item setObject:currentImage forKey:@"enclosure"];
[stories addObject:[item copy]];
NSLog(@"adding story: %@", currentTitle);
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于圈地.在XML中看起来像这样:
<enclosure length="150" url="urltoimage.jpg" type="image/jpeg" />
Run Code Online (Sandbox Code Playgroud)
如何从我的函数中获取该元素的url属性?
编辑 XML看起来像这样:
<item>
<title>...</title>
<link>...</link>
<description>...</description>
<pubDate>...</pubDate>
<enclosure length="150" url="urltoimage.jpg" type="image/jpeg" />
</item>
Run Code Online (Sandbox Code Playgroud)
我的foundCharacters函数看起来像这样:
- (void)parser: (NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([currentElement isEqualToString:@"title"]) {
[currentTitle appendString:string];
} else if ([currentElement isEqualToString:@"link"]) …Run Code Online (Sandbox Code Playgroud) 目前我有一个字符串,我想POST到URL.
除非遇到像"&"和"?"这样的特殊字符,否则它的效果非常好.它不会发布之后发布的任何数据.例如,如果我有一个字符串"我是什么东西?",它只会POST"我是某种东西".至于"?",它会在发布后转换为"2".
reason = 'What see see! Are you sure'2''
Run Code Online (Sandbox Code Playgroud)
我很确定它必须与编码有关,因为我可以看到"我是什么东西?" 因为它就在我设置编码之前:
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)
我也试过下面的编码没有成功:
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSData *postData = [post dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSData *postData = [post dataUsingEncoding:NSISOLatin1StringEncoding];
Run Code Online (Sandbox Code Playgroud)
以下是我从postData开始的代码:
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
//NSLog(@"PostData: %@", postData);
NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding];
NSLog(@"check string = %@", check);
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:strURLQueryString]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSURLResponse *response;
NSError …Run Code Online (Sandbox Code Playgroud) 我试图解析http://apps.wku.edu/iwku/maps/buildings/data/SouthCampus-Buildings.xml上的XML
在Swift Playground中使用以下代码
import UIKit
var str = "Hello, playground"
class Parse: NSObject, NSXMLParserDelegate{
func beginParse(){
let url = NSURL(string: "http://apps.wku.edu/iwku/maps/buildings/data/SouthCampus-Buildings.xml")
var xml = NSXMLParser(contentsOfURL: url)
xml?.delegate = self
xml?.parse()
}
func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: NSDictionary!) {
println("Element's name is \(elementName)")
println("Element's attributes are \(attributeDict)")
}
}
var instance = Parse()
instance.beginParse()
Run Code Online (Sandbox Code Playgroud)
不幸的是我在控制台中的输出如下所示:

为什么我的attributeDict看起来是空的,如何访问与这些元素相关的值?
我有一个类调用另一个类从URL解析(NSXMLParse).现在我想让这个调用它的类知道它什么时候完成,这样我就可以填充UI了.我猜一个代表将是要走的路,但我从来没有使用过一个,需要一些指导,如何这将是有线的.
谢谢
nsxmlparser ×10
xml ×5
iphone ×4
objective-c ×4
ios ×2
xcode ×2
cocoa-touch ×1
core-data ×1
delegation ×1
ios4 ×1
ios5 ×1
memory-leaks ×1
namespaces ×1
rss ×1
swift ×1
xml-parsing ×1