Используя XPath в Html -Agility-Pack, вы можете искать практически все в документе html.
Используемая вами XPath просматривает весь form
или список inputs
, но вы не ищете конкретную c вещь.
Если вам нужно указать c Элемент, имеющий атрибут name
, который содержит значение description
, вы можете использовать следующий xpath для его поиска.
var doc = new HtmlDocument();
doc.Load(file);
var inputNode = doc.DocumentNode.SelectSingleNode("//input[@name='description']");
if (inputNode == null)
{
Console.WriteLine("Empty Gift Box"); // nothing found.
}
else
{
Console.WriteLine(inputNode.Attributes["value"].Value.ToString());
}
// Prints 'example'
// Or you can use a single line lookup and assignment.
// Note.. ?. means if the result was null / not found, set left side = null.
Obj.Title = doc.DocumentNode.SelectSingleNode("//input[@name='title']")?.Attributes["value"]?.Value.ToString();
Как это работает
//
ищет весь документ
/
ищет тег сразу после тега перед ним (/ / форма / вход). Если бы между формой и вводом был другой тег, это дало бы 0 результатов.
.//
ищет любой тег под указанным тегом c, для которого вы вызываете SelectNodes. если есть входные теги снаружи, они не будут захвачены в grandChild.
var parentNode = doc.DocumentNode.SelectNodes("//form");
var grandChild = parentNode.SelectNodes(".//input"); // must be part of form.
, если вы ищете определенный c индекс ввода, или атрибут, или значение, вы можете использовать поиск по ключевым словам ,
// Get any first node that has both name and value
var specificNode = doc.DocumentNode.SelectSingleNode("//input[@name and @value]");
// Get first node that has specific name and value
var specificNode2 = doc.DocumentNode.SelectSingleNode("//input[@name='description' and @value='example']");
// Get 3rd input element
var thirdInput = doc.DocumentNode.SelectSingleNode("//input[3]");
Есть много других способов поиска в документе, но это должно привести вас в порядок. Обязательно прочитайте документацию HAP. и многие ответы уже доступны в StackOverflow в теге Html -Agility-Pack
Не забудьте пометьте пост, который отвечает на ваш пост как ответ.