我花了很多时间试图弄清楚如何使用HXT.我一直反对使用的例子deep.怎么deep办?
例如,此代码具有以下内容:
atTag tag = deep (isElem >>> hasName tag)
Run Code Online (Sandbox Code Playgroud)
-- case-insensitive tag matching
atTagCase tag = deep (isElem >>> hasNameWith ((== tag') . upper . localPart))
where tag' = upper tag
upper = map toUpper
Run Code Online (Sandbox Code Playgroud)
http://hackage.haskell.org/packages/archive/hxt/latest/doc/html/Control-Arrow-ArrowTree.html#v:deep
Run Code Online (Sandbox Code Playgroud)deep :: Tree t => a (t b) c -> a (t b) cSource递归地搜索整个树以查找谓词所持有的子树.搜索自上而下执行.找到树时,这将成为结果列表的元素.找到的树没有进一步检查任何索引,谓词也可以保留.请参阅
multi此类搜索.示例:
deep isHtmlTable选择文档中的所有顶级表元素(具有适当的定义isHtmlTable),但在表格单元格中不会出现表格.
您可以使用Hoogle或Hayoo找到给出函数名称或类型签名的文档!
基本上,如果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>
Run Code Online (Sandbox Code Playgroud)
deep (isElem >>> hasName "strong") tree 将返回一个列表
<strong id="a">
<strong id="e">
Run Code Online (Sandbox Code Playgroud)
因为我们可以<strong>在走进树时找到这两个s,同时(isElem >>> hasName tag) tree会返回一个空列表,因为树的根是a <p>,而不是<strong>