Компиляция Xpath Regex не показывает xml комментариев - PullRequest
0 голосов
/ 15 января 2020

Привет всем, я ужасен в Regex и удивляюсь, что именно означает // [not (*)], когда его помещают в XML XPath-компиляцию? Единственное, что я могу найти, это (https://regex101.com/r/Kjodlj/1)

Соответствует одному символу [не (*)].

not () не соответствует ни одному символу, а не () (чувствительно к регистру)

NodeList nodeList = (NodeList) xPath.compile("//*[not(*)]").evaluate(document, XPathConstants.NODESET);

Приведенный выше код не дает мне ничего из комментарии, которые есть в моем файле XML. Делая что-то вроде этого:

NodeList nodeList = (NodeList) xPath.compile("//*").evaluate(document, XPathConstants.NODESET);

Отображает комментарии, но также портит разбор страницы.

Есть ли регулярное выражение, которое выполняет оба эти действия, так что оно по-прежнему правильно форматирует, а также включает комментарии также? Или, возможно, сделать это в другой форме, которая проще, чем с помощью регулярных выражений?

1 Ответ

2 голосов
/ 15 января 2020

XPath.compile компилирует выражения XPath, а не выражения Regex. Они совершенно не связаны.

Выражение XPath //*[not(*)] выбирает все элементы в документе, которые не имеют дочернего элемента (то есть все конечные элементы). Это работает следующим образом:

  1. // расширяется до /descendant-or-self::node()/
  2. * расширяется до child::element()
  3. not(X), где X является набором узлов, проверяет, является ли набор узлов пустым.

Таким образом, выражение означает

/descendant-or-self::node()/child::element()[empty(child::element())]

, который выбирает все элементы, которые являются потомками чего-либо в document (на самом деле, все элементы являются дочерними элементами чего-либо), а затем фильтрует этот набор, чтобы сохранить только те, где child::element() ничего не возвращает, то есть те, которые не имеют дочерних элементов.

Но сначала вам нужно Выкиньте из головы, что это имеет отношение к регулярным выражениям. Если вы ищете учебник по Regex в надежде получить представление о XPath, вы очень запутаетесь.

...