我从这个问题继续这个问题。任务是在mb
节点中搜索具有特定值的 ,然后过滤掉与元素中的model
attribute
不匹配的节点。过滤后,我需要从. 我已经取得了一些进展。我能够匹配并捕获属性的值。value
attribute
dmiattr
rev
attribute
model
attribute
rev
但是我很难深入到孩子身上dmiattr
。我想我几乎拥有所有正确的功能,也许不是正确的组合子。也许我的代码逻辑也很不稳定。我不确定哪里出了问题。反馈同意。
import Text.XML
import Text.XML.Cursor
import qualified Data.Text as T
getProfiles :: AdviseConf -> IO () -- AdviseResult
getProfiles (AdviseConf model mb) = do
doc <- Text.XML.readFile def xmlFile
let cursor = fromDocument doc
_ <- Prelude.writeFile "test.txt" $
show $
cursor $//
check findNode &.// -- &//
attributeIs "model" "460" &.//
check findMB &.//
followingSibling &.//
attributeIs "value" "GF615M-P33 (MS-7597)" &.//
attribute "rev"
return ()
findNode :: Cursor -> Bool
findNode c = case (attribute "rev" c) of
[] -> False
otherwise -> True
findMB :: Cursor -> Bool
findMB c = case ( attribute "value" c) of
[] -> False
otherwise -> True