Frage
Ich bin in einer viel Zeit setzen versuchen, herauszufinden, wie HXT zu verwenden. Ich komme immer gegen Beispielen deep
. Was bedeutet deep
tun?
Zum Beispiel dieser Code Folgendes:
atTag tag = deep (isElem >>> hasName tag)
-- case-insensitive tag matching
atTagCase tag = deep (isElem >>> hasNameWith ((== tag') . upper . localPart))
where tag' = upper tag
upper = map toUpper
Lösung
http: //hackage.haskell.org/packages/archive/hxt/latest/doc/html/Control-Arrow-ArrowTree.html#v:deep
deep :: Tree t => a (t b) c -> a (t b) cSource
sucht rekursiv einen ganzen Baum für Teilbäume, für die ein Prädikat hält. Die Suche wird von oben nach unten durchgeführt. Wenn ein Baum gefunden wird, wird dies ein Element der Ergebnisliste. Der Baum weiter festgestellt wird, nicht für subtress untersucht, für die auch das Prädikat halten kann. Siehe
multi
für diese Art der Suche.Beispiel:
deep isHtmlTable
wählt alle Top-Level-Tabellenelemente in einem Dokument (mit einer entsprechenden Definition fürisHtmlTable
), aber keine Tabellen in einer Tabellenzelle auftreten.
Sie könnten die Dokumentation einen Funktionsnamen oder Art Unterschrift gegeben mit Hoogle oder Hayoo!
Grundsätzlich, wenn die XML-Struktur ist wie
<p>
<strong id="a">
<em id="b">
<strong id="c">
foo
</strong>
</em>
</strong>
<ins id="d">
<strong id="e">
bar
</strong>
<em id="f">
baz
</em>
</ins>
</p>
deep (isElem >>> hasName "strong") tree
eine Liste zurück für
<strong id="a">
<strong id="e">
, weil wir diese beiden <strong>
s finden können, wenn sie in den Baum zu Fuß, während (isElem >>> hasName tag) tree
eine leere Liste zurück, weil die Wurzel des Baumes ein <p>
, kein <strong>