Работа со списками в 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]

Разница только в скобках. Без скобок это будет работать как второй пример. Таким образом, у вас есть проблема, потому что различные исправления.

Другие вопросы по тегам