4

我花了很多时间试图弄清楚如何使用 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
4

1 回答 1

8

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),但表格单元格中没有出现表格。

您可以使用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>

deep (isElem >>> hasName "strong") tree将返回一个列表

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

<strong>因为我们在走进树的时候可以找到这两个s,while(isElem >>> hasName tag) tree会返回一个空列表,因为树的根是a <p>,而不是a<strong>

于 2010-10-10T07:07:58.240 回答