【问题标题】:NSXMLParser, getting strange issue while parsing data from web serviceNSXMLParser,在解析来自 Web 服务的数据时遇到奇怪的问题
【发布时间】:2015-07-15 10:45:43
【问题描述】:

我正在使用 Async 方法从 iPad App 调用 Web 服务。

我收到正确的数据,用“**”分隔

420031****New****2372–2398, NW Maynard Rd Cary North Carolina 美国2372–2398, NW Maynard Rd

connectionDidFinishLoading:(NSURLConnection *)connection -- 给我正确的数据...然后我做

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    if( m_xmlParser )
    {
        [m_xmlParser release];
    }

    m_xmlParser = [[NSXMLParser alloc] initWithData: m_webData];
    [m_xmlParser setDelegate: self];
    [m_xmlParser setShouldResolveExternalEntities: YES];
    [m_xmlParser parse];
}

在此之后,下面的代表被调用

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
}

我检查了字符串而不是“420031****New****2372–2398, NW Maynard Rd Cary North Carolina United States2372–2398, NW Maynard Rd”数据 我收到的只是“420031****New****2372”第一次调用和foundCharacters 第二次调用返回剩余字符串“–2398, NW Maynard Rd Cary North Carolina United States 2372–2398,西北梅纳德路"

但是对于其余记录,我得到了整个字符串,但是对于上述数据,它在解析时会中断...

我做了各种各样的测试,我不明白为什么它只有半个字符串。 只有这个记录。

【问题讨论】:

  • 所有其他记录是否也有(-)符号?
  • 我用其他结果调试,Bin Roll-In** 和 2372–2398 ,任何人都可以告诉我两个数字之间的字符......它是从数据库中保存的......由于 Roll 和 In 之间的字符与 2372 和 2398 之间的字符不同,因此我想我遇到了奇怪的问题.....让我知道它是什么字符......无法在 MAC 上运行......

标签: ios objective-c ipad parsing xml-parsing


【解决方案1】:

该方法不能保证您获得全部内容。来自Apple's documentation

解析器对象可能会发送几个委托 parser:foundCharacters: 报告字符的消息 元素。因为字符串可能只是总字符的一部分 当前元素的内容,您应该将其附加到当前元素 字符的积累,直到元素发生变化。

最好的办法是创建一个NSMutableString 并继续附加到它,直到您的代表收到parser:didEndElement 调用。你应该从XML parsing guide开始。

【讨论】:

  • 我没有得到 2372–2398 之间的字符类型(两个数字之间的字符)。 MAC 上不存在该字符....如果我将 2372-2398 替换为 2372-2398,它会正确解析...
  • 嗯...您的原始文本可能包含长于短划线 (-) 的长短划线 (-)。破折号是按等键左侧的键时得到的。一些文本编辑器,特别是 MS Word,当它位于单词字符之间时,会将短划线转换为短划线。无论如何,不​​要假设您将在一次通话中获得所有内容。你不知道哪些角色会触发分裂。
  • hmm 但是有什么方法可以解决它是 Web 服务本身.... C# 如果可能的话...因为这些结果仅来自 Web 服务....代替 ?但如果我做个人网络服务,那么他们会超过 100.. 如果我能得到提示就足够了..
  • 为什么我可以考虑网络服务修复...因为应用程序有这么多模块...从代码中这是不可能的...但可以从网络服务中思考...。
  • 您可以在 ObjC 中解析 XML 之前进行搜索和替换。但同样,您正在努力解决错误的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2023-03-27
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多