TBXML textForElement问题

时间:2012-10-19 15:15:13

标签: objective-c ios xml-parsing html-parsing tbxml

我正在尝试使用适用于iOS的TBXML库解析HTML,并且我希望获得这段HTML的“更多文本”值:

<div> 
 <a href="/url/1">
   <strong>value</strong>
 </a>
 more text
</div>

我已经使用过这段代码,但它似乎不起作用:

//Assume that "div" is a TBXMLElement* for this div 
NSString* content = [TBXML textForElement:div];
//Returns @"" when the value @"more text" is expected...

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

好的,我修改了TBXML库,我已经解决了问题......如果有人遇到同样的问题,请试试这个:

1)在文件TBXML.h中为TBXMLElement创建一个名为NSString * afterText的属性。

2)在文件TBXML.m中搜索此代码并对其进行评论:

// if parent element has children clear text
                if (parentXMLElement && parentXMLElement->firstChild)
                    parentXMLElement->text = 0;

3)在步骤1的代码之前写下此代码:

if (parentXMLElement && parentXMLElement->firstChild){

            //if the next string does not content...
            const char * parentNametag =  [[TBXML elementName:parentXMLElement] UTF8String];
            char * finalTag =  (char *)malloc(sizeof("</")+sizeof(parentNametag)+sizeof(">"));
            strcpy(finalTag,"</");
            strcat(finalTag,parentNametag);
            strcat(finalTag,">");

            char * elementTextStart = elementStart;//parentXMLElement->text;
            char * elementTextEnd = elementTextStart;

            elementTextEnd = strstr(elementStart,finalTag);

            if(elementTextEnd != NULL){
                long textLength = strlen(elementTextStart) - strlen(elementTextEnd) ;
                if (textLength > 0){
                    afterTextStart = (char *)malloc(textLength*sizeof(char));
                    memcpy(afterTextStart, elementTextStart,(textLength*sizeof(char)));
                    parentXMLElement->afterText = afterTextStart;
                }
            }

        }

现在,“文字后”属性包含“更多文字”

这不是一个正统的解决方案,但它对我有用。