質問

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-arrowtre.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">

これら2つを見つけることができるからです <strong>sは木に足を踏み入れるとき、s (isElem >>> hasName tag) tree 木のルートは <p>, 、ではありません <strong>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top