我在我的一个项目中使用TBXML,我想知道
例如,有没有办法检查标签是否不包含文本
<Description/>vs
<Description> This is text </Description>当我使用调试器并输入po [TBXML textForElement:groupdescription]时,当读取的标记是不带文本的标记时,它会返回<object returned empty description>,而另一个则可以很好地工作。所以我的问题是,我如何检查它?
谢谢
发布于 2012-03-06 20:53:29
如果你查看TBXML源代码,你会发现
+ (NSString*) textForElement:(TBXMLElement*)aXMLElement {
if (nil == aXMLElement->text) return @"";
return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding];
}所以,
如果你在gdb上执行po @"“,你会得到"object returned description”
我想你应该检查一下文本的长度...实际上,TBXML是一个轻量级的xml解析器,并且不包括xml验证等。这就是它如此之快的原因。)
发布于 2012-08-09 17:06:11
以防其他人也面临同样的问题。TBXML具有以下类函数
+ (NSString*) textForElement:(TBXMLElement*)aXMLElement {
if (nil == aXMLElement->text) return @"";
return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding];
}
+ (NSString*) textForElement:(TBXMLElement*)aXMLElement error:(NSError **)error {
// check for nil element
if (nil == aXMLElement) {
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
return @"";
}
// check for nil text value
if (nil == aXMLElement->text || strlen(aXMLElement->text) == 0) {
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_TEXT_IS_NIL];
return @"";
}
return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding];
}通过使用第二个,它会为您进行检查。据我所知,大多数像这样的调用都有一个+error版本。
请注意,它需要一个**错误。
https://stackoverflow.com/questions/9583808
复制相似问题