سؤال

أضع الكثير من الوقت في محاولة لمعرفة كيفية استخدام 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-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>ق عند المشي في الشجرة ، بينما (isElem >>> hasName tag) tree سيعود قائمة فارغة لأن جذر الشجرة هو <p>, ، ليس أ <strong>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top