Question

Je vais avoir quelques problèmes avec HXT , bien que je pense qu'il est juste quelque chose que je me manque sur les flèches.

J'ai une structure XML comme

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

structure interne comme

data XmlData = XmlStr String | XmlList XmlData

Y at-il un moyen d'éléments à frais virés un pas dans une flèche?

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

L'appel récursif à getXmlData doit recueillir de réponse et l'envelopper dans un constructeur XMLList, mais je ne sais pas comment collecter des termes. Actuellement, je suis avec un certain accomplissement de cette post-traitement sur la sortie (collecte sur le même nom), mais je voudrais une meilleure solution.

Était-ce utile?

La solution

En général, vous pouvez utiliser listA Control.Arrow.ArrowList pour le faire. Il est de type (ArrowList a) => a b c -> a b [c] et est

  combinateur

pour convertir une flèche   dans une version determinstic avec tous   résultats recueillis dans un seul élément   liste.

(Voir mes réponses et pour un exemple concret.)

Dans ce cas spécifique, vous pouvez utiliser le combinateur >. avec le constructeur de XmlList comme second argument pour accomplir la même chose de façon plus concise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top