Frage

Ich habe einige Probleme mit HXT , obwohl ich vermute, es ist nur etwas fehlt mir über Pfeile.

Ich habe eine XML-Struktur wie

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

Und interne Struktur wie

data XmlData = XmlStr String | XmlList XmlData

Gibt es eine Möglichkeit zu sammeln Elemente in einem Schritt in einem Pfeil?

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

Der rekursive Aufruf GetXMLData braucht es die Antwort und wickelt in einem XMLList-Konstruktor zu sammeln, aber ich weiß nicht, wie Begriffe zu sammeln. Ich dies zu erreichen zur Zeit mit etwas Nachbearbeitung am Ausgang (auf dem gleichen Namen zu sammeln), aber ich würde eine bessere Lösung gefällt.

War es hilfreich?

Lösung

In der Regel können Sie listA von Control.Arrow.ArrowList dies zu tun. Es hat Typ (ArrowList a) => a b c -> a b [c] und ist ein

  

combinator zum Umwandeln eines Pfeils   in eine determinstic Version mit allen   Die Ergebnisse in einem einzigen Element gesammelt   Liste.

(Siehe meine Antworten hier und hier für ein konkretes Beispiel.)

In diesem speziellen Fall, dass Sie den >. combinator mit dem XmlList Konstruktor als zweites Argument verwenden, um die gleiche Sache prägnanter zu erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top