Некоторые значения атрибутов не чувствительны к регистру (input[type]), некоторые (*[class]) - как это обрабатывает Html Agility Pack?
Я пытаюсь выбрать элемент по его типу
//input[(@type = 'checkbox' or @type = 'radio') and @name = 'BigBobMcNob']
но это не соответствует, потому что мой тип с большой буквы
<input type='Checkbox' name='BigBobMcNob' />
Как мне это исправить? и если я сделаю это, он сломается при выборе класса, который должен быть чувствительным к регистру?
1 ответ
Решение
Вы можете просто перебрать коллекцию узлов и проверить каждый узел на соответствие вашим условиям:
var allowedName = "Checkbox";
var allowedTypes = new[] { "checkbox", "radio" };
var nodes = doc.DocumentNode.DescendantNodes()
.Where(n =>
n.Name == "input" &&
allowedTypes.Contains(n.GetAttributeValue("type", null), StringComparer.OrdinalIgnoreCase) &&
n.GetAttributeValue("type", null) == allowedName
).ToList();
За type
сравнение атрибутов, StringComparer.OrdinalIgnoreCase
используется компаратор; name
Атрибут не требует специального компаратора.