Вопрос

Я вкладываю много времени, пытаясь выяснить, как использовать HXT. Я продолжаю приходить к примерам, используя deep. Отказ Что значит deep делать?

Например, Этот код имеет следующее:

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
Это было полезно?

Решение

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

Рекурсивно ищет целое дерево для поддеревов, для которого проводится предикат. Поиск выполняется сверху вниз. Когда дерево найден, это становится элементом списка результатов. Найденное дерево еще не рассматривается для любой подтопы, для которой также может удержаться предикат. Видеть multi Для такого рода поиска.

пример: deep isHtmlTable Выбирает все элементы таблицы верхнего уровня в документе (с соответствующим определением для isHtmlTable) Но нет таблиц, возникающих в таблице-ячейке.

Вы можете найти документацию, учитывая имя функции или введите подпись Добыча или Геоу!


В основном, если дерево XML похоже на

<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 вернет список для

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

потому что мы можем найти эти два <strong>S при прохождении в дерево, в то время как (isElem >>> hasName tag) tree вернет пустой список, потому что корня дерева является <p>, а не а <strong>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top