سؤال

أواجه بعض المشاكل مع hxt, ، على الرغم من أنني أظن أنه مجرد شيء أفتقده في الأسهم.

لدي بنية XML مثل

<str name="field1">value</str>
<lst name="field2"><str>value2</str><str>value3</str></lst>

والهيكل الداخلي مثل

data XmlData = XmlStr String | XmlList XmlData

هل هناك طريقة لجمع العناصر في خطوة في السهم؟

getXmlData :: IOSArrow XmlTree (String, XmlData)
getXmlData = (getAttrl >>> getChildren >>> getText) &&& 
      ((filterByType "str" >>> getText >>> arr (\x -> XmlStr x))
      <+> (filterByType "lst" >>> getXmlData))
  where filterByType t = isElem >>> hasName t >>> getChildren

تحتاج الدعوة العودية إلى getxmldata إلى جمع إجابتها واللف في مُنشئ Xmllist ، لكنني لا أعرف كيفية جمع المصطلحات. أنا حاليًا أقوم بإنجاز هذا مع بعض المعالجة المنشورة على الإخراج (التجميع على نفس الاسم) ، لكني أرغب في حل أفضل.

هل كانت مفيدة؟

المحلول

بشكل عام يمكنك استخدامه listA من عند Control.Arrow.ArrowList لفعل هذا. له نوع (ArrowList a) => a b c -> a b [c] وهو

combinator لتحويل سهم إلى إصدار محدد مع جميع النتائج التي تم جمعها في قائمة عنصر واحد.

(انظر إجاباتي هنا و هنا للحصول على مثال ملموس.)

في هذه الحالة المحددة ، يمكنك استخدام >. combinator مع XmlList مُنشئ كحجة ثانية لإنجاز نفس الشيء بشكل أكثر دقة.

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