С помощью c # 4.0 и htmlagilitypack, как я могу читать значения внутри определенной таблицы. Я имею в виду, скажем, есть 10 таблиц, и я хочу читать значения с 6-го или у меня есть идентификатор таблицы.
Или скажем, что я хочу прочитать значение td после определенного td.
Или стол, идущий после определенного div или элемента или текста. Возможно ли это?
Все, о чем вы просили, можно сделать относительно легко. Не имеет значения, что его документация может отсутствовать, она должна быть похожа на XML и реализацию XmlDocument
в сети как в использовании, так и в функциональности.
Как читать значения внутри определенной таблицы? Предположим, что есть 10 таблиц, и я хочу читать значения с 6-го или у меня есть идентификатор таблицы.
Поиск шестой таблицы:
// XPath
var table6 = doc.DocumentNode.SelectSingleNode("//table[6]");
// LINQ
var table6 = doc.DocumentNode.Descendants("table").Skip(5).FirstOrDefault();
Поиск таблицы / элемента по id:
var myTable = doc.GetElementById("myTable");
// XPath
var myTable = doc.DocumentNode.SelectSingleNode("//table[@id='myTable']");
var myTable = doc.DocumentNode.SelectSingleNode("//*[@id='myTable']");
// LINQ
var myTable = doc.DocumentNode
.Descendants("table")
.Where(table => table.Attributes.Contains("id"))
.SingleOrDefault(table => table.Attributes["id"].Value == "myTable");
var myTable = doc.DocumentNode
.Descendants()
.Where(e => e.Attributes.Contains("id"))
.SingleOrDefault(e => e.Attributes["id"].Value == "myTable");
var myTable = doc.DocumentNode
.Descendants("table")
.SingleOrDefault(table => table.GetAttributeValue("id", null) == "myTable");
var myTable = doc.DocumentNode
.Descendants()
.SingleOrDefault(e => e.GetAttributeValue("id", null) == "myTable");
Предположим, я хочу прочитать значение td после определенного td.
// XPath
var certainTd = table6.SelectSingleNode("//td[2]");
var tdAfterCertainTd = certainTd.SelectSingleNode("following-sibling::td[1]");
// LINQ (not so easy)
var certainTd = table6.Descendants("td").Skip(1).FirstOrDefault();
var tdAfterCertainTd = certainTd.NextSibling;
while (tdAfterCertainTd != null)
{
if (tdAfterCertainTd.Name == "td")
break;
tdAfterCertainTd = tdAfterCertainTd.NextSibling;
}
Стол придет после определенного div или элемента или текста.
// XPath
var certainDiv = doc.DocumentNode.SelectSingleNode("//div[1]");
var tableAfterCertainDiv = certainDiv.SelectSingleNode("following-sibling::table[1]");
// LINQ (not so easy)
var certainDiv = doc.DocumentNode.Descendants("div").FirstOrDefault();
var tableAfterCertainDiv = certainDiv.NextSibling;
while (tableAfterCertainDiv != null)
{
if (tableAfterCertainDiv.Name == "table")
break;
tableAfterCertainDiv = tableAfterCertainDiv.NextSibling;
}
Вы должны заметить некоторые шаблоны.