0

我在我的一个项目中使用 TBXML,我想知道

有没有办法检查标签是否不包含文本,例如

<Description/>

对比

<Description> This is text </Description>

当我使用调试器并键入po [TBXML textForElement:groupdescription]<object returned empty description>时,当读取的标记是没有文本的标记时,另一个可以完美运行。所以我的问题是,我该如何检查呢?

谢谢

4

2 回答 2

1

如果您查看 TBXML 源代码,您会发现

+ (NSString*) textForElement:(TBXMLElement*)aXMLElement {
if (nil == aXMLElement->text) return @"";
return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding];
}

所以,

如果你在 gdb 上做 po @"" - 你会得到“对象返回空描述”

我认为您可能应该检查文本长度...实际上,TBXML 是一个轻量级的 xml 解析器,不包括 xml 验证等。这就是它如此之快的原因;)

于 2012-03-06T12:53:28.550 回答
0

以防其他人面临同样的问题。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 版本。

请注意,它需要一个**错误。

于 2012-08-09T09:06:10.897 回答