Pregunta

Me estoy poniendo en un montón de tiempo tratando de encontrar la manera de utilizar HXT. Sigo contra ejemplos usando deep. ¿Qué hace deep?

Por ejemplo, este código tiene la siguiente:

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

Otro ejemplo:

-- case-insensitive tag matching
atTagCase tag = deep (isElem >>> hasNameWith ((== tag') . upper . localPart))
  where tag' = upper tag
        upper = map toUpper
¿Fue útil?

Solución

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
     

busca recursivamente un árbol conjunto de sub-estructuras, para lo cual tiene un predicado. La búsqueda se realiza de arriba hacia abajo. Cuando se encuentra un árbol, esto se convierte en un elemento de la lista de resultados. El árbol no encontrado se examina más adelante para cualquier subtress, para los que el predicado también podría sostener. Ver multi para este tipo de búsqueda.

     

ejemplo: selecciona deep isHtmlTable todos los elementos de la tabla de nivel superior en un documento (con una definición apropiada para isHtmlTable), pero no hay mesas que ocurren dentro de una celda de la tabla.

Se puede encontrar la documentación dado un nombre de función o tipo de firma con Hoogle o Hayoo!


Básicamente, si el árbol XML es como

<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 devolverá una lista de

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

, ya que podemos encontrar estos dos <strong>s al caminar en el árbol, mientras que (isElem >>> hasName tag) tree devolverá una lista vacía porque la raíz del árbol es un <p>, no un <strong>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top