- Извлечение значений из поддерева
- http://adit.io/posts/2012-04-14-working ... skell.html
- https://www.schoolofhaskell.com/school/ ... validation
- Запуск Haskell HXT вне ввода-вывода?
- извлечение нескольких HTML-таблиц с помощью hxt
- Разбор HTML в Haskell
- http://neilbartlett.name/blog/2007/08/0 ... ormationa/
- https://wiki. haskell.org/HXT/Practical/Simple2
- https://wiki.haskell.org/HXT/Practical/Simple1
- Группирование строк таблицы HTML с помощью HXT в Haskell
- Разбор нескольких дочерних узлов в Haskell с помощью 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
Код: Выделить всё
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")]
Попытка 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
Мобильная версия