Ios TFHpple提取过去的元素';第一个孩子';或';家长';
如何获取数组中比Ios TFHpple提取过去的元素';第一个孩子';或';家长';,ios,objective-c,xpath,hpple,Ios,Objective C,Xpath,Hpple,如何获取数组中比firstChild或parent NSString *tutorialsXpathQueryString = @"//table/tr/td/ancestor::table[1]"; // @"//tr/td/table/tr/td/a" NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString]; NSLog(@"here is url: %@", t
firstChild
或parent
NSString *tutorialsXpathQueryString = @"//table/tr/td/ancestor::table[1]";
// @"//tr/td/table/tr/td/a"
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];
NSLog(@"here is url: %@", tutorialsNodes);
NSMutableArray *newTutorials = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in tutorialsNodes) {
// 5
Tutorial *tutorial = [[Tutorial alloc] init];
[newTutorials addObject:tutorial];
tutorial.url = [[element parent] objectForKey:@"style"];
//tutorial.url = [element objectForKey:@"style"];
//tutorial.url = [[element firstChild] objectForKey:@"style"];
//tutorial.url = [element tagName];
tutorial.title = [[element parent] objectForKey:@"title"];
//tutorial.title = [element objectForKey:@"title"];
//tutorial.title = [[element firstChild] objectForKey:@"title"];
//tutorial.title = [[element firstChild] tagName];
我的阵列示例:
{\n nodeAttributeArray = (\n {\n attributeName = style;\n nodeContent = \"background-color: #008000; border-style: none;\";\n },\n {\n attributeName = border;\n nodeContent = 0;\n },\n {\n attributeName = cellpadding;\n nodeContent = 2;\n },\n {\n attributeName = cellspacing;\n nodeContent = 2;\n }\n );\n nodeChildArray = (\n {\n nodeChildArray = (\n {\n nodeChildArray = (\n },\n {\n attributeName = border;\n nodeContent = 0;\n },\n {\n attributeName = src;\n nodeContent = \"https://spacer.gif\";\n },\n {\n attributeName = title;\n nodeContent = \"07:00,24hrs: B Shift /.../E704/RS704/Firefighter #2\";\n },\n {\n attributeName = alt;\n nodeContent = \"07:00,24hrs: B Shift /.../E704/RS704/Firefighter #2\";\n }\n );\n nodeName = img;\n }\n );\n nodeName = td;\n },\n
我对Objective-C没有经验,但请尝试一下 TFHppleElement的
父属性
本身就是一个TFHppleElement,因此它又有一个父属性
。如果你继续通过这些父节点,你最终会找到你要寻找的节点。例如,要将父级升级到2级,请执行以下操作:
TFHppleElement *table = [[element parent] parent];
由于XPath只定位表下两个级别的
td
s(实际上,这是它们应该位于的唯一位置),因此检索父级的父级应该会得到您要查找的表。实际上恰恰相反,我再也不能从td那里得到风格和头衔,但我现在可以得到上面的表格了。td元素似乎位于阵列的更下方。。。就像第二个或第三个孩子。。。但是我不知道如何从objectForKey中获取那么深的元素:@BarclayVision我的建议是回到原始XPath(//table/tr/td
)来定位所有的td
。一旦有了td
s,我想您可以使用类似于我上面描述的方法来定位它们的父表。在单个XPath中使用//table/tr/td/祖先::table[1]
没有任何用处。这只是一种非常迂回的方法,可以获得与//table[tr/td]
相同的结果,也就是说,任何在tr
下有td
的表。我们要寻找的是通过执行“[[[element parent]parent]parent]”得到的多层深度