Question

Je suis en train dans beaucoup de temps à essayer de comprendre comment utiliser HXT. Je continue à venir contre des exemples utilisant deep. Qu'est-ce deep faire?

Par exemple, ce code a ce qui suit:

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

Autre exemple:

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

La solution

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
     

recherche récursive un arbre entier pour les sous-arbres, dont un prédicat détient. La recherche est effectuée haut vers le bas. Quand un arbre se trouve, cela devient un élément de la liste des résultats. L'arbre est Trouvées pas examiné plus pour tout subtress, pour lesquels le prédicat pourrait également tenir. Voir multi pour ce type de recherche.

     

Exemple: deep isHtmlTable Sélectionne tous les éléments de table de niveau supérieur dans un document (avec une définition appropriée pour isHtmlTable) mais pas de tables ayant lieu dans une cellule de table.

Vous pourriez trouver la documentation donnée un nom de fonction ou de type signature avec Hoogle ou Hayoo!


En fait, si l'arbre XML est comme

<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 retourne une liste

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

parce que nous pouvons trouver ces deux <strong>s lors de la marche dans l'arbre, tandis que (isElem >>> hasName tag) tree retourne une liste vide parce que la racine de l'arbre est un <p>, pas <strong>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top