【问题标题】:TFHpple - getting element HTML without element's tags?TFHpple - 获取没有元素标签的元素 HTML?
【发布时间】:2013-05-13 19:02:47
【问题描述】:

我正在解析一些 HTML,我需要获取 <body /> 的所有 innerHTML。我是这样做的:

TFHpple *doc = [[TFHpple alloc] initWithHTMLData:[NSData dataWithContentsOfFile:sectionFilePath]];
TFHppleElement *body = [doc searchWithXPathQuery:@"//body"][0];

NSString *bodyHTML  = body.raw;

但是这会返回:

<body>stuff inside body</body>

而不仅仅是:

stuff inside body

问题:有什么办法可以得到一个元素的纯内部HTML,不包括它自己的标签?

我想出了这个方法,但我觉得我在这里重新发明了*。这种方法也很慢。

TFHppleElement *child;
for(int i = 0; i<body.children.count; i++){
    child = (TFHppleElement*)body.children[i];

    if(child.raw != nil) [bodyHTML appendString:child.raw];
    else if(child.content != nil) [bodyHTML appendString:child.content];
}

【问题讨论】:

    标签: iphone ios objective-c xml tfhpple


    【解决方案1】:

    试试这个...

    NSURL *url = [NSURL URLWithString: URL_HERE];
    NSData *htmlData = [NSData dataWithContentsOfURL:url];
    
    TFHpple *parser = [TFHpple hppleWithHTMLData:htmlData];
    
    NSString *xpathQueryString = @"//body";
    NSArray *nodes = [parser searchWithXPathQuery:xpathQueryString];
    
    for (TFHppleElement *element in nodes) {
    
        lable.text = [[element firstChild] content];
    }
    

    【讨论】:

    • 这似乎只给出了正文中第一个元素的文本,这不是我需要的……看来您也是从另一篇文章中复制的?
    • 添加像这样的其他元素的标签,@"//body/h1/ul/li" 顺便说一句,这是来自我编写的应用程序
    【解决方案2】:

    我有一个同样的问题要解决,我最终所做的是获取带有 html 格式的 element.raw,然后使用此处描述的一种方式删除标签:

    Remove HTML Tags from an NSString on the iPhone

    我使用了 stipHtml 函数。

    【讨论】:

    • 对,我的解决方案是切换到不同的 XML Parser,RaptureXML。
    最近更新 更多