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