标签: nsxmlparser

NSXMLParser的解析方法是否异步

NSXMLParser的解析方法是异步的吗?

换句话说,如果我有一个NSXMLParse对象,并且我[someParseObject parse]从主线程调用,它会阻止主线程吗?

iphone concurrency cocoa objective-c nsxmlparser

10
推荐指数
1
解决办法
5023
查看次数

NSXMLParser无法解析特殊字符(重音符号)

我正在使用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)

xcode nsxmlparser nsxml xml-parsing nsxmlelement

10
推荐指数
1
解决办法
9332
查看次数

NSXMLParser泄漏

我有以下代码泄漏.仪器说它是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)

泄漏的图像....

alt text http://www.shipfinder.co.uk/images/memoryleak.png

iphone memory-leaks nsxmlparser nsxml

9
推荐指数
1
解决办法
6016
查看次数

使用NSXMLParser解析XML文件 - 获取值

我有一个XML文件,其中包含我想要使用的一些数据:

<?xml version="1.0" encoding="UTF-8" ?>

<items>
<item name="product" price="19.95" where="store">
This is the first product.
</item>

<item name="product2" price="39.95" where="online">
This is the second product.
</item>

<item name="product3" price="99.95" where="garagesale">
This is the third product.
</item>

</items>
Run Code Online (Sandbox Code Playgroud)

如果我制作了4个数组,一个用于名称,一个用于价格,一个用于购买,一个用于描述,如何将数据输入数组?

我想使用的NSXMLParser,但不能得到name,price,where或说明.

我一直坚持如何做到这一点.

任何帮助赞赏.

xml iphone objective-c nsxmlparser ios

9
推荐指数
2
解决办法
1万
查看次数

使用NSInputStream流式传输NSXMLParser

更新:

使用NSXMLParser类方法时initWithContentsOfURL,不是在下载XML提要时进行解析,而是尝试将整个XML文件加载到内存中,然后才启动解析过程.如果XML提要量很大(使用过多的RAM,本身效率低下,因为它不是与下载并行解析,而是仅在下载完成后才开始解析等),这是有问题的.

有没有人发现如何使用源将数据流传输到设备来解析NSXMLParser?是的,您可以使用LibXML2(如下所述),但似乎应该可以使用它NSXMLParser.但这是在逃避我.

原始问题:

我正在努力使用NSXMLParser从Web流中读取XML.如果您使用initWithContentsOfURL,虽然界面可能会导致人们推断它会从Web流式传输XML,但它似乎不会这样做,而是在尝试进行任何解析之前尝试先加载整个XML文件.对于适度大小的XML文件来说这很好,但是对于非常大的XML文件来说,这是有问题的.

我已经看到NSXMLParserinitWithStreamNSInputStream从网络流式传输的一些定制使用相关的讨论.例如,有一些答案建议使用类似下面的Cocoa Builder帖子中CFStreamCreateBoundPair引用的内容和Apple Stream Programming Guide中关于设置套接字流的讨论,但我还没有使用它.我甚至尝试写我自己的子类是使用(这是它本身,在流还不错),但我无法得到它与一起工作.NSInputStreamNSURLConnectionNSXMLParser

最后,我决定使用LibXML2而不是NSXMLParser,如Apple XMLPerformance示例中所示,但我想知道是否有人有幸从使用的网络源获取流媒体NSXMLParser.我见过很多"理论上你可以做X "之类的答案,这一切从CFStreamCreateBoundPair给抓住了HTTPBodyStreamNSURLRequest,但我还没有遇到与流的工作演示NSXMLParser.

Ray Wenderlich文章如何为您的iPhone项目选择最佳的XML解析器似乎证实它NSXMLParser不适合大型XML文件,但是所有帖子都有关于NSXMLParser基于可能的解决方案的流量来传输非常大的XML文件,我我很惊讶我还没有找到这方面的工作示范.有谁知道NSXMLParser从网络流出的功能实现?显然,我可以坚持使用LibXML2或者其他一些等效的XML解析器,但是流式传输的概念NSXMLParser似乎非常接近.

nsxmlparser nsinputstream ios

9
推荐指数
1
解决办法
2454
查看次数

如何使用NSXMLParser来解析具有相同名称的父子元素

有没有人知道如何使用事件驱动的模型NSXMLParser类解析以下xml?

<Node>
  <name> Main </name>
  <Node>
    <name> Child 1 </name>
  </Node>

  <Node>
    <name> Child 2 </name>
  </Node>
</Node>
Run Code Online (Sandbox Code Playgroud)

我想从这个xml文件中收集所有三个名字,是否可能,或者我必须更改为基于树的解析?

iphone objective-c nsxmlparser xml-parsing

8
推荐指数
2
解决办法
3万
查看次数

在iOS中解析XML /'屏幕抓取'的最佳方法是什么?UIWebview还是NSXMLParser?

我正在创建一个需要从网页获取一些数据的iOS应用程序.我的第一个是使用NSXMLParser initWithContentsOfURL:和解析NSXMLParser代表的HTML .然而,这种方法似乎很快就会变得痛苦(例如,如果改变了HTML,我将不得不重写解析代码,这可能很尴尬).

看到我正在加载一个网页,我也看了一下UIWebView.看起来UIWebView可能是要走的路.stringByEvaluatingJavaScriptFromString:似乎是一种非常方便的方法来提取数据,并允许将javascript存储在一个单独的文件中,如果HTML发生变化,该文件很容易编辑.然而,使用UIWebView似乎有点hacky(看作UIWebView是一个UIView子类,它可能会阻止主线程,并且文档说javascript有10MB的限制).

在我遇到困难之前,有没有人对解析XML/HTML有任何建议?

更新:

我写了一篇关于我的解决方案的博客文章:iOS中的HTML解析/屏幕抓取

iphone screen-scraping uiwebview nsxmlparser ios

8
推荐指数
2
解决办法
1万
查看次数

Swift中的parser.parse()导致EXC_BAD_ACCESS

我正在关注本教程,作为我正在Swift工作的RSS馈送器应用程序的快速入门.我知道自从本教程以来Swift中有一些变化,但它们似乎都没有解释为什么我遇到这个问题.

相关代码(据我所知)在我的TableViewController中如下:

 override func viewDidLoad() {
    super.viewDidLoad()

    let url:NSURL = NSURL(string: "my.url.string")
    parser = NSXMLParser(contentsOfURL: url)
    parser.delegate = self
    parser.parse() // <- Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

}
Run Code Online (Sandbox Code Playgroud)

实际的解析器委托方法似乎没有问题,因为我在它们上放置了断点,甚至在崩溃之前都没有调用它们.

我的假设是它是一个Swift错误,但我想在我向苹果抱怨之前确保我没有遗漏一些东西.

exc-bad-access nsxmlparser ios swift xcode6

8
推荐指数
1
解决办法
2051
查看次数

在iOS swift中进行xml解析

我正在对Aadhar卡进行条形码或QR码扫描.我得到的响应为以下xml格式.如何使用xml解析将其转换为字典格式?

 <?xml version="1.0" encoding="UTF-8"?><PrintLetterBarcodeData uid="685860050795" name="Sangeetha D" gender="F" yob="1989" co="W/O: Dhanansekaran" house="632" street="saradhambal nagar" lm="agaramel" vtc="Nazarathpettai" po="Nazarethpettai" dist="Tiruvallur" subdist="Poonamallee" state="Tamil Nadu" pc="600123" dob="03/06/1989"/>
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码进行解析

 public func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
    currentElement=elementName;

    print(currentElement)


}

public func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    currentElement="";

}

public func parser(parser: NSXMLParser, foundCharacters string: String) {

}
Run Code Online (Sandbox Code Playgroud)

但它总是返回currentElement"PrintLetterBarcodeData"

xml nsxmlparser xml-parsing ios swift

8
推荐指数
1
解决办法
8536
查看次数

解析存储在iPhone应用程序的Documents目录中的XML文件

NSXMLParser有三种类型的init.

- > init

- > initWith Data

- > init的initWithContents


=>但是我的xml文件存储在Application的Document目录中,所以如何解析存储在"Doc Dir"中的文件

提前致谢.

iphone objective-c nsxmlparser

7
推荐指数
1
解决办法
2228
查看次数