Некоторые значения атрибутов не чувствительны к регистру (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 Атрибут не требует специального компаратора.

Другие вопросы по тегам