XPath извлекает два запроса - PullRequest
0 голосов
/ 22 августа 2011

Я хочу получить имя и адрес электронной почты «Лидер курса» с этой веб-страницы:

http://www.westminster.ac.uk/schools/computing/undergraduate/computer-games-development/bsc-honours-computer-games-development.

Как этого достичь?

Я попытался получить первое <p> после «Содержания курса», но не вполне работает ..

"//div[starts-with(@id,'content_div')]/h3[.='Course Content']/following-sibling::p[1]

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

Поскольку на самом деле нет ни одного уникального идентифицирующего тега ни для одного из значений, которые вы ищете, я бы пропустил xpath и просто создал грязный маленький хак.

// get the HTML code.
NSString * getURL = [NSString stringWithFormat:@"http://www.westminster.ac.uk/schools/computing/undergraduate/computer-games-development/bsc-honours-computer-games-development"];
NSData * htmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:getURL]];
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];


//seperate the HTML code by the unique HTML line of "<h3>Course Leader</h3>"
NSArray *tempArray = [htmlString componentsSeparatedByString:@"<h3>Course Leader</h3>"];
NSString * tempString1 = [[tempArray objectAtIndex:1]description];

//get Name
NSArray * tempArray2 = [tempString1 componentsSeparatedByString:@"<br />"];

//set name
NSString * nameString = [[tempArray2 objectAtIndex:0]description];
//clean up name string
nameString = [nameString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
nameString = [nameString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
nameString = [nameString stringByReplacingOccurrencesOfString:@"<p>" withString:@""];

//get Email 
NSArray * emailArray = [tempString1 componentsSeparatedByString:@">"];

//set email string
NSString * emailString = [[emailArray objectAtIndex:3]description];
//clean up email string
emailString = [emailString stringByReplacingOccurrencesOfString:@"</a" withString:@""];

NSLog(@"Results: Name = %@  Email = %@",nameString,emailString);
0 голосов
/ 22 августа 2011

Я не знаю точно, как выглядит код xml / xpath в Objective C, но я подозреваю, что вы уже уже получаете всю необходимую информацию, вам просто нужно сделать немного больше, чтобы взять это отдельно. Узел, полученный вашим xpath, выглядит следующим образом (я редактировал содержимое):

<p>Anastassia Angelopolou<br />
Email: <a href="mailto:agelopa@wmin.ac.uk.invalid">agelopa@wmin.ac.uk.invalid</a></p>

поэтому, если вы просто запросите текст узла p, вы просто получите текст Anastassia Angelopolou, (первый) внутренний текст вплоть до первого дочернего узла (<br />) ). Чтобы получить адрес электронной почты, вы можете выполнить xpath с имеющегося у вас узла p до дочернего узла ./a и получить текст или значение @href.

...