Определить строку селектора CSS против строки XPath - PullRequest
0 голосов
/ 15 апреля 2019

Я работаю над небольшим модулем запросов (в js) для html, и я хочу предоставить общую функцию query(selector), поддерживающую в качестве строкового аргумента как селекторы css, так и селекторы XPath.

Независимо от того, каккаждый выбор сделан, моя проблема здесь в том, как определить, является ли данная строка селектором xpath или css.Мы можем предположить, что функция будет выглядеть примерно так:


function query(selector){
   selectorKind = identifySelectorKind(selector); // I want to know how to code this particular function

   if(selectorKind==="css") return queryCss(selector);
   if(selectorKind==="xPath") return queryXPath(selector); //Assume both functions exists and work
}

Мой первый подход (учитывая мое ограниченное знание запросов xPath) состоял в том, чтобы определить тип запроса, проверив, является ли первый символ / (здесь я предполагаю, что все соответствующие запросы xPath начинаются с /)

Итак, identifySelectorKind будет выглядеть примерно так:

function identifySelectorKind(selector){
    if (selector[0] === "/") return "xPath";
    else return "css";
}

Обратите внимание, что мне не нужно проверятьни селекторы css, ни xpath, мне нужен только однозначный способ их различения.Этой логики будет достаточно?(другими словами, все селекторы xPath начинаются с /, и ни один селектор css не начинается одинаково?), если нет, есть ли лучший способ или некоторые соображения, которые я, возможно, захочу узнать?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вы не можете обязательно.Например, * является допустимым xpath и допустимым селектором css, но он соответствует разному набору элементов в каждом.

0 голосов
/ 15 апреля 2019

Если вы абсолютно уверены, что ваш XPath-селектор всегда будет начинаться с /, тогда да, все в порядке.Обратите внимание, что селектор XPath не обязательно должен начинаться с /, но если ваш всегда выбирает из корня, то все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...