2010-01-22 22 views
10

Durante il tentativo di analizzare i feed RSS in Groovy, ho trovato un esempio GPath utilizzando i caratteri jolly:Qual è la sintassi completa delle espressioni GPath di Groovy?

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 

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

Sembra un uso divertente dell'operatore 'spread-punto'. Non riesco a trovare alcun riferimento a questo sul sito di Groovy, sui libri, ecc.

Come funziona e, cosa ancora più importante, come lo scopri? C'è qualche XPath con GPath "Rosetta Stone" là fuori?

risposta

18

Bene, come al solito, il posto migliore per trovare informazioni è nella fonte Groovy stessa.
Il risultato di un parsing è un oggetto groovy.util.slurpersupport.GPathResult.

Se si guarda alla fonte (file java pianura), vedrete che il metodo getProperty (stringa) ha le seguenti operatori speciali:

  • ".." che restituisce il genitore
  • "*" che restituisce tutti i bambini
  • "**" che agiscono come una profondità primo loop
  • "@" che viene utilizzato per accedere a una proprietà
  • normale nodo di accesso.

Questo è tutto, non ci sono altre parole chiave magiche per il momento.

+0

Eccellente, grazie! Avevo provato a guardare la fonte ma non riuscivo a capire dove guardare. –

3

Tutte queste stringhe sono trattate come proprietà. Nessuno di loro è in realtà un operatore.

Le chiamate vengono instradate tramite GPathResult#getProperty che controlla in particolare gli operatori elencati nella risposta di gizmo.

Problemi correlati