Вопрос
Я вкладываю много времени, пытаясь выяснить, как использовать 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>