Работа со списками в 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 = deep (getChildren >>> getText)
Я понял, что если я пропущу getChildren
немного, это работает правильно:
text = deep getText
Пока у меня есть только один div
элемент. Если у меня есть несколько div
элементы, я получаю обратно массив с длиной для каждого элемента.
1 ответ
Рассмотрим следующие два примера:
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]
Разница только в скобках. Без скобок это будет работать как второй пример. Таким образом, у вас есть проблема, потому что различные исправления.