我正在学习在iOS平台上使用NSXMLParser
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)
return;
[listOfTimes addObject:string];
}
}
它基本上将三个“时间”元素存储在一个数组中。然而,问题是它似乎以换行符的形式拾取空白。这是控制台中阵列的打印输出......
Printing description of listOfTimes:
(
"2010-08-21T22:00:00-05:00",
"\n ",
"2010-08-22T01:00:00-05:00"
)
这是我正在处理的XML数据的片段......
<time-layout time-coordinate="local" summarization="none">
<layout-key>k-p3h-n40-1</layout-key>
<start-valid-time>2010-08-21T22:00:00-05:00</start-valid-time>
<start-valid-time>2010-08-22T01:00:00-05:00</start-valid-time>
<start-valid-time>2010-08-22T04:00:00-05:00</start-valid-time>
<start-valid-time>2010-08-22T07:00:00-05:00</start-valid-time>
<start-valid-time>2010-08-22T10:00:00-05:00</start-valid-time>
.
.
.
我误解了这是如何工作的吗?
提前感谢您的帮助!
答案 0 :(得分:6)
简单的解决方案是创建didEndElement:
方法,将currentElement
设置为kXMLElementOther
。
在Ignorable White Space处对Ignorable White Space
进行了很好的描述。问题可能是您没有与文档关联的DTD。所以解析器实际上并不知道可忽略的空白是什么。 (它不仅仅是标签之间的空白区域,这可能与您的想法相同)所以它只是将所有内容都视为字符数据。
答案 1 :(得分:3)
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//whatever data i am getting from node i am appending it to the nodecontent variable
[nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
NSLog(@"node content = %@",nodecontent);
}
答案 2 :(得分:2)
我发现你的问题的答案在下面的代码中进行了编辑
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
添加此行代码
NSString *stringToDisplay = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
现在回复你在上面提到的函数中使用“stringToDisplay”找到“string”的地方
它对我有用。希望它也适合你。 享受编码。