首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TFHpple获取第一级

使用TFHpple获取第一级
EN

Stack Overflow用户
提问于 2015-09-16 08:25:58
回答 2查看 217关注 0票数 1

我在使用TFHpple时遇到了一些问题,下面是:我想解析以下几行:

代码语言:javascript
复制
<div class=\"head\" style=\"height: 69.89px; line-height: 69.89px;\">
    <div class=\"cell editable\" style=\"width: 135px;\"contenteditable=\"true\">
        <p>&nbsp;1</p>
    </div>
    <div class=\"cell\" style=\"width: 135px;\" contenteditable=\"false\">
        <p>2</p>
    </div>
</div>

<div style=\"height: 69.89px; line-height: 69.89px;\" class=\"head\">
    <div class=\"cell\" style=\"width: 135px; text-align: left;\"contenteditable=\"false\">
        <p>3&nbsp;</p>
    </div>
    <div class=\"cell\" style=\"width: 135px;\" contenteditable=\"false\">
        <p>4</p>
    </div>
</div>

<div style=\"height: 69.89px; line-height: 69.89px;\" class=\"\">
    <div class=\"cell\" style=\"width: 135px;\" contenteditable=\"false\">
        <p>5</p>
    </div>
    <div class=\"cell\" style=\"width: 135px;\" contenteditable=\"false\">
        <p>6</p>
    </div>
</div>

现在,我想将div的第一级“元素”(抱歉,我不知道正确的术语)放在数组中。因此,我试图通过简单地将/div作为xPath给searchWithXPathQuery方法来实现,但是它根本找不到任何东西。

我的第二个解决方案是尝试使用这种路径://div[@class=\"head\"],但也允许[@class=\"\"],但我甚至不知道这是否可能。(我希望这样做,因为我需要元素在数组中的顺序与数据中的顺序相同)

所以我的问题是,TFHpple为什么不使用/div有什么特别的原因吗?如果没有办法只使用第一级的div,那么是否可以用xPath (这里是属性class)对属性值进行谓词?(怎么做到的?我现在看了很多东西,什么也找不到)

谢谢你的帮助。

PS :如果有帮助,下面是我尝试分析数据的代码,它首先包含在字符串self.material.Text中:

代码语言:javascript
复制
NSData * data = [self.material.Text dataUsingEncoding:NSUnicodeStringEncoding];
TFHpple * tableParser = [TFHpple hppleWithHTMLData:data];
NSString * firstXPath = @"/div";
NSArray<TFHppleElement *> * tableHeader = [tableParser searchWithXPathQuery:firstXPath];
NSLog(@"We found : %d", tableHeader.count);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-16 08:43:46

你写道:

使用TFHpple获取第一级

我想你的意思是:没有得到所有的后代?

考虑到您的其他需求,您可以这样做:

代码语言:javascript
复制
//div[not(ancestor::div)][@class='head' or @class='']

剖析这一点:

  • 在整个文档中的任意级别选择所有div元素(是,正确的术语;)://div
  • 对不包含div本身的元素使用谓词(括号中的内容)进行筛选,方法是检查是否存在div祖先(.的父父的父) [not(ancestor::div)]
  • 按其他要求过滤:[@class='head' or @class='']

注1:给定的XML无效,它包含多个根元素。XML最多只能有一个根元素。

注2:如果您的需求首先通过“class”或“空”“类”获取所有div,然后只获取“第一级”的div,则反转谓词:

代码语言:javascript
复制
//div[@class='head' or @class=''][not(ancestor::div)]
票数 0
EN

Stack Overflow用户

发布于 2015-09-16 08:39:56

您可以使用以下XPath表达式获取div元素(这是一个非常正确的术语),类属性值等于"head"或空:

代码语言:javascript
复制
//div[@ciass='head' or @class='']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32603317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档