2012-04-15 8 views
3

Ich werde verrückt versuchen, die einfachen >>. und >. Funktionen here definiert zu verwenden.Arbeiten mit Listen in HXT

Ich möchte die Länge von alle den Text für einen Knoten in HXT erhalten. Ich verwende diese:

runX (doc //> hasName "div" //> text >>. unlines) 

Wo doc meine XmlTree Pfeil ist.

Das bekommt mir den ganzen Text für alle divs (einschließlich Text in allen Kindern, die sie haben). Es erhält den Text als String, weil ich unlines verwende. Jetzt möchte ich die Länge dieser Zeichenfolge erhalten, so dass ich versuchen:

runX (doc //> hasName "div" //> text >>. unlines >. length) 

Und HXT scheint auf magische Weise meinen String zurück in ein Array zu umwandeln, weil ich diese:

[0,17,0,20,0,11,...] 

Was ich will, sind all diese Int s zusammengefasst. Wie würde ich das tun?

aktualisieren:

Die Textfunktion ist wie folgt definiert:

text = deep (getChildren >>> getText) 

ich herausgefunden, wenn ich das getChildren Bit überspringen, das funktioniert richtig:

text = deep getText 

Wie Solange ich nur ein div Element habe. Wenn ich mehrere div Elemente habe, bekomme ich ein Array mit der Länge für jedes Element zurück.

+0

Ich bin nicht mit HXT überhaupt vertraut, aber würde nur '... >>. Länge. macht die Arbeit aus? Oder vielleicht '... >>. (length. unlines) ', abhängig von der Rangfolge des Operators. –

+0

Nein. '>>.' erwartet eine Liste als Ergebnis, also würde ich Ihren Vorschlag schreiben als: 'runX (doc //> hasName" div "//> Text >>. (\ x -> [Länge. unlines $ x])) '. Ich bekomme "[0,17,0,20,0,11, ...]" als Ergebnis. –

+0

Warum nicht einfach 'sum $ runX ...'? –

Antwort

2

Betrachten wir die nächsten zwei Beispiele:

Prelude Text.XML.HXT.Core> flip runLA undefined $ (constL [1, 2] >>> arr id) >>. take 1 
[1] 
Prelude Text.XML.HXT.Core> flip runLA undefined $ constL [1, 2] >>> (arr id >>. take 1) 
[1,2] 

Der Unterschied ist nur in Klammern. Ohne Klammern funktioniert es als zweites Beispiel. Sie haben also das Problem, verschiedene Fixitäten.

+0

Ich kann nicht glauben, dass es so einfach war. Mind = geblasen, danke. –