我在使用TFHpple时遇到了一些问题,下面是:我想解析以下几行:
<div class=\"head\" style=\"height: 69.89px; line-height: 69.89px;\">
<div class=\"cell editable\" style=\"width: 135px;\"contenteditable=\"true\">
<p> 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 </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中:
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);发布于 2015-09-16 08:43:46
你写道:
使用TFHpple获取第一级
我想你的意思是:没有得到所有的后代?
考虑到您的其他需求,您可以这样做:
//div[not(ancestor::div)][@class='head' or @class='']剖析这一点:
//div[not(ancestor::div)][@class='head' or @class='']注1:给定的XML无效,它包含多个根元素。XML最多只能有一个根元素。
注2:如果您的需求首先通过“class”或“空”“类”获取所有div,然后只获取“第一级”的div,则反转谓词:
//div[@class='head' or @class=''][not(ancestor::div)]发布于 2015-09-16 08:39:56
您可以使用以下XPath表达式获取div元素(这是一个非常正确的术语),类属性值等于"head"或空:
//div[@ciass='head' or @class='']https://stackoverflow.com/questions/32603317
复制相似问题