HXT - 什么是"深层"?

Muc*_*hin 4 xml haskell hxt

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

ken*_*ytm 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
Run Code Online (Sandbox Code Playgroud)

递归地搜索整个树以查找谓词所持有的子树.搜索自上而下执行.找到树时,这将成为结果列表的元素.找到的树没有进一步检查任何索引,谓词也可以保留.请参阅multi此类搜索.

示例:deep isHtmlTable选择文档中的所有顶级表元素(具有适当的定义isHtmlTable),但在表格单元格中不会出现表格.

您可以使用HoogleHayoo找到给出函数名称或类型签名的文档!


基本上,如果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>