Domanda

sto mettendo in un sacco di tempo a cercare di capire come utilizzare HXT. Continuo a contro esempi utilizzando deep. Cosa fa deep fare?

Per esempio, questo codice ha il seguente:

atTag tag = deep (isElem >>> hasName tag)

Un altro esempio:

-- case-insensitive tag matching
atTagCase tag = deep (isElem >>> hasNameWith ((== tag') . upper . localPart))
  where tag' = upper tag
        upper = map toUpper
È stato utile?

Soluzione

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
     

Ricerche ricorsivamente un albero intero per sottostrutture, per il quale un predicato detiene. La ricerca viene effettuata dall'alto verso il basso. Quando viene trovato un albero, questo diventa un elemento della lista dei risultati. Il TROVATO albero non viene ulteriormente esaminato per qualsiasi subtress, per cui il predicato anche potrebbe contenere. Vedere multi per questo tipo di ricerca.

     

esempio: seleziona deep isHtmlTable tutti gli elementi della tabella di alto livello in un documento (con una definizione appropriata per isHtmlTable) ma nessuna tabella verificano all'interno di una cella.

Si potrebbe trovare la documentazione dato un nome di funzione o il tipo di firma con Hoogle o Hayoo!


In sostanza, se l'albero XML è come

<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 restituirà un elenco per

<strong id="a">
<strong id="e">

perché possiamo trovare queste due <strong>s quando si cammina in albero, mentre (isElem >>> hasName tag) tree restituirà un elenco vuoto, perché la radice dell'albero è un <p>, non un <strong>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top