Я wokring с htmlAgilityPack, и я хватаю таблицу с сайта.
Как я могу изменить это, чтобы возвращать значения для каждой строки, только для каждого второго столбца.
public static void SearchAnimal(string param)
{
string prm = param;
string url = "http://xxx/xxx.action?name=";
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url+prm);
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//StreamReader stream = new StreamReader(response.GetResponseStream());
//string final_response = stream.ReadToEnd();
var webGet = new HtmlWeb();
var doc = webGet.Load(url + prm);
HtmlNodeCollection tr = doc.DocumentNode.SelectNodes("//table[@id='animal']//tbody//tr//td");
for(int i = 0; i <= tr.Count; ++i){
var link = tr
.Descendants("a")
.First(x => x.Attributes["href"] != null);
string hrefValue = link.Attributes["href"].Value;
string name = link.InnerHtml;
Match match = Regex.Match(hrefValue, @"(\d+)$");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine("Result " + tr + ":");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Animal Name: " + name);
Console.WriteLine("Animal Key: " + match.Value);
Console.WriteLine("-------------------------");
Console.WriteLine("");
}
}
Вы можете использовать фильтр позиции XPath, чтобы получить только 2-й <td>
child из каждого <tr>
:
//table[@id='animal']//tbody//tr/td[2]
Он фактически равен CSS :nth-of-type()
селектор :nth-of-type()
и показывает тот же результат, что и :nth-child()
только если все дети одного типа (в этом случае все дети <td>
).