Каков полный синтаксис выражений Groovy для GPath? - PullRequest
10 голосов
/ 22 января 2010

При попытке проанализировать RSS-каналы в Groovy я нашел пример GPath с использованием групповых символов:

def text = """ 
<data> 
   <common-tables> 
    <table name="address"/> 
    <table name="phone"/> 
  </common-tables> 

  <special-tables> 
    <table name="person"/> 
  </special-tables> 

  <other-tables> 
    <table name="business"/> 
  </other-tables> 
</data> 
""" 

def xml = new XmlParser().parse(new ByteArrayInputStream(text.getBytes())) 
def tables = xml.'**'.table.findAll{ it.parent().name() == 
"special-tables" || it.parent().name

(от http://old.nabble.com/Q:-Avoiding-XPath---using-GPath-td19087210.html)

Это выглядит как забавное использование оператора 'точка-точка'. Я не могу найти ссылки на это на сайте Groovy, в книгах и т. Д.

Как это работает, и, что более важно, как вы это обнаруживаете? Есть ли какой-нибудь XPath для GPath 'Rosetta Stone'?

Ответы [ 2 ]

19 голосов
/ 22 января 2010

Ну, как обычно, лучшее место для поиска информации - в самом Groovy-источнике.
Результат синтаксического анализа - объект groovy.util.slurpersupport.GPathResult.

Если вы посмотрите на источник (обычный java-файл), то увидите, что метод getProperty (string) имеет следующие специальные операторы:

  • "..", который возвращает родителя
  • "*", который возвращает всех детей
  • "**", которые действуют как первый цикл глубины
  • "@", который используется для доступа к свойству
  • нормальный узел доступа.

Вот и все, на данный момент других волшебных ключевых слов нет.

3 голосов
/ 22 января 2010

Все эти строки рассматриваются как свойства. Ни один из них на самом деле не операторы.

Звонки направляются через GPathResult # getProperty , который специально проверяет операторов, перечисленных в ответе гизмо.

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