2012-04-15 77 views
3

我要瘋了試圖使用簡單的>>.>.函數定義here在HXT中使用列表

我想獲得長度爲全部 HXT中節點的文本。我使用的是這樣的:

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

哪裏doc是我XmlTree箭。

這使我得到所有div的所有文本(包括他們擁有的任何孩子的文本)。它將文本作爲字符串獲取,因爲我使用的是unlines。現在,我想該字符串的長度,所以我嘗試:

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

而且HXT似乎我的字符串神奇地轉換回一個數組,因爲我得到這個:

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

我想要什麼總結了所有那些Int。我將如何做到這一點?

更新

TEXT函數的定義如下:

text = deep (getChildren >>> getText) 

我想通了,如果我跳過getChildren位,這正常工作:

text = deep getText 

由於只要我只有一個div元素。如果我有多個div元素,我會返回一個數組,其長度爲每個元素。

+0

我對HXT一點都不熟悉,但只會做'... >>。長度 。 unlines'工作?或者也許'...... >>。 (length。unlines)',這取決於運算符的優先級。 – 2012-04-15 05:19:58

+0

不是。 ''。''''''''期待一個列表作爲結果,所以我會把你的建議寫成:'runX(doc //> hasName「div」//> text >>。(\ x - > [length。unlines $ x] ))'。因此,我得到了'[0,17,0,20,0,11,...]'結果。 – 2012-04-15 05:47:39

+0

爲什麼不只是'sum $ runX ...'? – 2012-04-15 21:34:32

回答

2

考慮下面兩個例子:

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] 

的差異只在括號內。 沒有括號它將作爲第二個例子。所以你有這個問題不同的固定。

+0

我不能相信這是基本的。心=吹,謝謝。 – 2012-04-16 20:46:21