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)

Ein anderes Beispiel:

-- case-insensitive tag matching
atTagCase tag = deep (isElem >>> hasNameWith ((== tag') . upper . localPart))
  where tag' = upper tag
        upper = map toUpper
War es hilfreich?

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ür isHtmlTable), 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>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top