我在使用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);
答案 0 :(得分:0)
您可以使用以下XPath表达式来获取div
元素 - 这是一个非常正确的术语 - 类属性值等于"head"
或为空:
//div[@ciass='head' or @class='']
答案 1 :(得分:0)
您写道:
使用TFHpple获得第一级
我认为你的意思是:没有得到所有的后代?
考虑到您的其他要求,您可以按照以下方式执行此操作:
//div[not(ancestor::div)][@class='head' or @class='']
解剖:
//div
[not(ancestor::div)]
对于不包含div的元素,使用谓词(括号之间的东西)进行过滤LI>
[@class='head' or @class='']
注1:您的给定XML无效,它包含多个根元素。 XML最多只能包含一个根元素。
注2:如果你的要求是首先通过@class或空@class获取所有div,然后只获得那些“第一级”,则反转谓词:
//div[@class='head' or @class=''][not(ancestor::div)]