2010-01-22 5 views
10

Bei dem Versuch, RSS-Feeds in Groovy zu analysieren, fand ich ein GPath Beispiel als Platzhalter:Wie lautet die vollständige Syntax von Groovys GPath-Ausdrücken?

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 

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

Es ist wie eine lustige Verwendung des 'spread-Punkt' Betreiber sieht. Ich kann keinen Verweis darauf finden auf der Groovy-Website, Bücher, etc.

Wie funktioniert das und vor allem, wie entdecken Sie das? Gibt es einen XPath zu GPath 'Rosetta Stone' da draußen?

Antwort

18

Nun, wie üblich, ist der beste Ort, um Informationen zu finden, in der Groovy-Quelle selbst.
Das Ergebnis einer Analyse ist ein groovy.util.slurpersupport.GPathResult-Objekt.

Wenn Sie an der Quelle suchen (plain Java-Datei), sehen Sie, dass die getProperty (string) Methode die folgenden speziellen Operatoren hat:

  • "..", dass die Rendite der zugrundeliegenden
  • „*“, die alle Kinder
  • „**“ zurückgibt, die als Tiefen erste Schleife wirken
  • „@“, die verwendet wird, eine Eigenschaft zuzugreifen
  • der normale Knoten Accessor.

Das ist alles, keine anderen magischen Schlüsselwörter für den Moment.

+0

Ausgezeichnet, danke! Ich hatte versucht, die Quelle zu sehen, konnte aber nicht herausfinden, wo ich suchen sollte. –

3

Alle diese Zeichenfolgen werden als Eigenschaften behandelt. Keiner von ihnen ist tatsächlich Betreiber.

Die Anrufe werden über GPathResult#getProperty geleitet, die speziell nach den Operatoren sucht, die in Gizmos Antwort aufgelistet sind.

Verwandte Themen