Записи из в таблице Html с использованием стрелок и HXT в HaskellHtml

Программисты Html
Ответить
Anonymous
 Записи из в таблице Html с использованием стрелок и HXT в Haskell

Сообщение Anonymous »

Хотим извлечь записи из таблицы в очень хорошо сформированной таблице HTML с помощью HXT. Я рассмотрел несколько примеров по SO и документации HXT, например:
Моя проблема:


Я хочу однозначно идентифицировать таблицу по известному идентификатору, а затем для каждой
tr в этой таблице создайте объект записи и верните его как список
записей.


Вот мой HTML

Код: Выделить всё


FakeHTML



Null
Junk!



NameFavorite Rock



Fred
Igneous


Bill
Sedimentary





Вот код, который я пытаюсь использовать, а также два разных подхода к его анализу. Во-первых, импорт...

Код: Выделить всё

{-# LANGUAGE Arrows, OverloadedStrings, DeriveDataTypeable, FlexibleContexts  #-}
import Text.XML.HXT.Core
import Text.HandsomeSoup
import Text.XML.HXT.XPath.XPathEval
import Data.Tree.NTree.TypeDefs
import Text.XML.HXT.XPath.Arrows
Мне нужен список Rockrecs, например, из...

Код: Выделить всё

recs = [("rock1", "Name", "Fred", "Favorite Rock", "Igneous"),
("rock2", "Name", "Bill", "Favorite Rock", "Sedimentary")]

data Rockrec = Rockrec { rockID:: String,
rockName :: String,
rockFav :: String} deriving Show

rocks = [(\(a,_,b,_,c) -> Rockrec a b c ) r | r >
(getAttrValue "id" &&& (node "td" //> getText)))
Это вроде как работает. Мне нужно немного помассировать, но я могу заставить его работать...

Код: Выделить всё

-- table >>= runLA getIt
-- [("","Name"),("","Favorite Rock"),("rock1","Fred"),("rock1","Igneous"),("rock2","Bill"),("rock2","Sedimentary")]
Это второй подход, вдохновленный https://wiki.haskell.org/HXT/Practical/Simple1. Здесь я думаю, что полагаюсь на что-то в {-# LANGUAGE Arrows -} (что случайно нарушает мое понимание списка для записи выше), чтобы использовать функцию proc, чтобы сделать это в более читаемом блоке do. Тем не менее, я не могу скомпилировать даже минимальную версию:

Попытка 2

Код: Выделить всё

 getR :: ArrowXml cat => cat XmlTree Rockrec
getR = (hasAttrValue "id" (== "Greatest-Table")) >>>
proc x -> do
rockId  Rockrec
Actual type: XmlTree -> Rockrec
• The function ‘getR’ is applied to one argument,
its type is ‘cat0 XmlTree Rockrec’,
it is specialized to ‘XmlTree -> Rockrec’
In the expression: getR table
In an equation for ‘it’: it = getR table
ЗАВЕРШИТЬ РЕДАКТИРОВАНИЕ

Даже если я не выбираю элементы, я могу не заставлю вышеперечисленное работать. Я также немного озадачен тем, как мне сделать что-то вроде размещения первого td в rockName и второго td в rockFav, как включить в них итератор (предположим, у меня много полей td, а не только 2.)

Любые дополнительные общие советы о том, как сделать это более безболезненно, приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/412 ... in-haskell
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»