我正在使用TBXML解析器。我不确定这是否特定于TBXML。我有一个日期在的XML文件。然后我使用TBXML解析它。然后我想使用NSDateFormatter格式化这个日期,但是当我调试它并使用NSLog输出时,它显示为(null)。
这是我的XML:
<locations>
<location>
<place>null</place>
<geo>null</geo>
<location_date>2010-12-25 10:15:15 +0000</location_date>
</location>
<location>
...
</location>
</locations>
这就是我解析的方式。我已经加载了XML文件了(我已经测试了其他节点,我可以输出值,所以它正在读取XML。我检测到root然后在节点周围做一个while循环。我创建了一个Location类,具有保存检索到的XML节点值的相关属性。这些都是NSString,但我确实尝试过NSDate for locationDate。
我应该在节点中以不同方式存储日期吗?很高兴在需要时提供更多代码。
if (root) {
// search for the first location element within the root element's children
TBXMLElement * location = [TBXML childElementNamed:@"location" parentElement:root];
NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMdd"];
// if an location element was found
while (location != nil) {
// instantiate an location object
Location * aLocation = [[Location alloc] init];
TBXMLElement * locationDate = [TBXML childElementNamed:@"location_date" parentElement:location];
// if we found a locationDate
if (locationDate != nil) {
aLocation.locationDate = [TBXML textForElement:locationDate];
NSDate *locDate=[formatter dateFromString:aLocation.locationDate];
NSLog(@"the current location date is %@", locDate);
}
[locations addObject:aLocation];
[aLocation release];
// find the next sibling element named "location"
location = [TBXML nextSiblingNamed:@"location" searchFromElement:location];
}
}
我得到的控制台输出是:
the current location date is (null)
然后我想把它放在格式中,这样我就可以比较日期了,但是我甚至无法从xml中读取日期并正确格式化它们。
感谢任何帮助。
保
答案 0 :(得分:1)
您的DateFormat
不正确。如果没有完美设置,结果字符串将为nil
。试试这种方式:
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss +ZZZ"];
点击此处查看NSDateFormatter
的精彩参考:
http://cocoawithlove.com/2009/05/simple-methods-for-date-formatting-and.html