我正在使用NSXMLParser从url解析xml(我的代码与此处的代码几乎完全相同)
一些元素包含特殊字符,如"á",这使得一个单词很可能被分成两个(á和ndre).
这是我的loadXMLByURL
-(id) loadXMLByURL:(NSString *)urlString{
tickets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;}
Run Code Online (Sandbox Code Playgroud)
我很确定这是因为没有设置编码(我认为它需要是NSUTF8StringEncoding)但我不知道在哪里/如何应用它.
[更新]我的其余代码......
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"ticket"])
{
currentTicket = [Ticket alloc];
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"name"])
{
currentTicket.name = currentNodeContent;
} …Run Code Online (Sandbox Code Playgroud) 我有以下代码泄漏.仪器说它是rssParser对象泄漏.我"刷新"XML feed并运行块并且它泄漏....
file.h
@interface TestAppDelegate : NSObject <UIApplicationDelegate> {
NSXMLParser *rssParser;
}
Run Code Online (Sandbox Code Playgroud)
file.m
NSData *data = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];
rssParser = [[NSXMLParser alloc] initWithData:data];
[rssParser setDelegate:self];
[rssParser setShouldProcessNamespaces:NO];
[rssParser setShouldReportNamespacePrefixes:NO];
[rssParser setShouldResolveExternalEntities:NO];
[rssParser parse];
[rssParser release];
Run Code Online (Sandbox Code Playgroud)
泄漏的图像....
有没有办法在编程时以正确的方式格式化XML文件?
例如,如果我使用此代码创建一个简单的XML文件:
NSXMLElement *fallback_driver = [[NSXMLElement alloc] initWithName:@"fallback-driver"];
NSXMLElement *folder = [[NSXMLElement alloc] initWithName:@"folder"];
[folder setStringValue:[ads_make objectValueOfSelectedItem]];
NSXMLElement *filename =[[NSXMLElement alloc] initWithName:@"filename"];
[filename setStringValue:ads_driver_name_selected];
[fallback_driver addChild:folder];
[fallback_driver addChild:filename];
NSXMLElement* rootNode = [ads_user_printxml rootElement];
[rootNode addChild:fallback_driver];
Run Code Online (Sandbox Code Playgroud)
当这个运行时,我想按照下图中的注释部分输出,而不是实际的XML(没有注释).

我如何以这种方式格式化XML文件?谢谢!
PS
谢谢你的答案.但是,我想将我拥有的NSXMLDocument转换为NSData以便保存...
我在尝试
NSData *newData = [[ads_user_printxml XMLDataWithOptions:NSXMLNodePrettyPrint]XMLData];
Run Code Online (Sandbox Code Playgroud)
但是我收到一条警告,"'NSData'可能无法响应'-XMLData',在我添加XMLDataWithOptions之前,它工作得很好.我也尝试了'XMLStringWithOptions'方法(如你所说 - 但是认为数据更多适当的),但产生了相同的警告.
有任何想法吗?非常感谢!
我正在使用NSXmlParser来解析rss feed.到目前为止一切运作良好.
我预计rss feed最终会包含几十个/几百个帖子.我目前的解决方案是读取整个RSS Feed并显示结果.但是我想只阅读前十个帖子(以防止它解析可能有数百个项目).然后在稍后的时间(例如当用户到达表的末尾时)来解析接下来的十个帖子.
所以我的问题是如何解析前十个帖子,然后解析接下来的十个帖子,然后解析接下来的十个帖子等等......
这是我用来获取所有帖子的内容:
- (void)parseXMLFileAtURL:(NSString *)URL
{
myArray = [[NSMutableArray alloc] init];
//convert the path to a proper NSURL or it won't work
NSURL *xmlURL = [NSURL URLWithString:URL];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[rssParser setDelegate:self];
[rssParser parse];
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
//error
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
//clear out our story item caches...
item = [[NSMutableDictionary alloc] init]; …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个应该包含solo标签的XML字符串(即.标签没有单独的结束标签)我能够创建正常的xml标签,如
<tagname attribute=attributevalue></tagname>
Run Code Online (Sandbox Code Playgroud)
使用代码
NSXMLElement *childElement=[[NSXMLElement alloc] initWithName:childName];
childElement.stringValue=childValue;
[childElement addAttribute:[NSXMLNode attributeWithName:attributeName stringValue:attributeValue]];
[self.currentNode addChild:[childElement copy]];
Run Code Online (Sandbox Code Playgroud)
但我需要这样的
<tagname attributename=attributevalue />
Run Code Online (Sandbox Code Playgroud) 我看到还有其他与此相关的问题,但没有使用NSXML.
所以,我正在使用NSXML从头开始构建一个XML文档,当我创建一个带字符串值的NSXMLNode时,该字符串中的所有"<"字符都替换为"<" 当我输出节点,或将其保存到文件.
例:
NSXMLNode *description = [NSXMLNode elementWithName:@"description"
stringValue:@"<![CDATA[Some Description</a>]]>"];
Run Code Online (Sandbox Code Playgroud)
然后当我这样做
NSLog(@"description: %@", description);
Run Code Online (Sandbox Code Playgroud)
我得到节点,所有'<'字符都替换为"<".但是,当我这样做
NSLog(@"description string value: %@", [description stringValue]);
Run Code Online (Sandbox Code Playgroud)
我得到正确的字符串输出.这个XML文档将保存为谷歌地球的KML文件,谷歌地球在发现"<"时给我一个错误 令牌.知道如何让NSXML输出'<'?我正在使用OSX 10.6和XCode 3.2顺便说一句.
HI,
我需要一个XML解析器.我想知道哪一个更快?NSXMLParser还是KissXML?
期待回复......
我的NSXMLParsing因为"&"字符而无法工作..我的代码在下面.请帮忙吗?
NSString *myRequestString = [NSString stringWithFormat:@"http://abc.com/def/webservices/aa.php?family_id=%d",self.passFamilyId];
//NSLog(@"Requested Service = %@",myRequestString);
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:myRequestString]];
[request setHTTPMethod: @"POST" ];
NSData *downloadedData = [ NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *str = [[NSString alloc] initWithData:downloadedData encoding:NSASCIIStringEncoding];
//NSString *contentString = [str stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
NSData * data=[str dataUsingEncoding:NSUTF8StringEncoding];
//NSLog (@"string is :%@" ,str);
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
// Call the XMLParsers's initXMLParse method.
ClientDetailXmlParser *parser = (ClientDetailXmlParser*)[[ClientDetailXmlParser alloc] initXMLParser];
[xmlParser setDelegate:parser];
BOOL success = [xmlParser parse];
// Check for XML …Run Code Online (Sandbox Code Playgroud) nsxml ×9
nsxmlparser ×5
objective-c ×5
cocoa ×3
iphone ×3
ios ×2
nsxmlelement ×2
xcode ×2
macos ×1
memory-leaks ×1
rss ×1
xml ×1
xml-parsing ×1