У меня есть программа ниже для токенизации выражения Xpath. Но он не может обрабатывать такие выражения:
/employees/employee[secret-code=a/b/c][unicode=d/e/f]/salary
По сути, токенизация с помощью '/' нарушается, поскольку сами предикаты содержат '/'.
const char *g_xpath_node_delim = "/";
static void tokenize_xpath (char *xpath_str)
{
const char *tok = NULL;
if (!xpath_str)
return;
while ((tok = strsep(&xpath_str, g_xpath_node_delim)) != NULL) {
if (tok[0] == '\0')
continue;
fprintf(stdout, "\nToken '%s'\n", tok);
}
}
Я хочу построить структуру узлов вместе с их предикатами. Есть какие-нибудь подсказки?
🤔 А знаете ли вы, что...
C можно использовать для создания высокоэффективных и производительных алгоритмов и вычислений.
XPath имеет довольно сложную грамматику (я не буду вдаваться в информатику на уроках грамматики, потому что сам не совсем разбираюсь в этом предмете), но это рекурсивно определенная грамматика, что означает, что вы не можете провести правильный анализ структуры выражения. с одноуровневым токенизатором на основе регулярных выражений. Вам понадобится настоящий синтаксический анализатор XPath для построения синтаксического дерева. В зависимости от того, чего вы хотите достичь и сколько усилий вы хотите приложить, вы можете либо попытаться воспользоваться существующим парсером XPath с открытым исходным кодом, либо написать свой собственный.