Question

Is there a way to test a node (Attribute Value) and use it with my if-condition ? For example:

import Text.XML.HXT.Core
import System.Environment  --para uso do getArgs
import Data.List.Split (splitOn)

data Class = Class { name ::String }
    deriving (Show,Eq)

main = do
   [src]<- getArgs
   teams <- runX(readDocument [ withValidate no] src  >>> getClass)
   print teams
--Test
test = if (True) then getAttrValue "rdf:about" else getAttrValue "rdf:ID"

atTag tag = deep (isElem >>> hasName tag)
getClass = atTag "owl:Class" >>>
    proc l -> do
    className <- test -< l
    returnA -< Class { name = splitOn "#" className !! 1}

On that example, i would like to test an attribute value and if it exists it return my then-condition otherwise the else-condition ! I saw the API of XMLArrow and it exists some function which will be able to do it (for example, isAttrib or hasAttrib) But it doesn't return a boolean ... So ... I thought on other ways for solving it, but i think there must be a simpler solution to solve that... Can someone gives me a hint please ?

Was it helpful?

Solution

You can use the functions of the module Control.Arrow.ArrowIf of the hxt package. Here you find the function ifA, a lifted version of the if-else-statement. For example the code

if (True) then getAttrValue "rdf:about" else getAttrValue "rdf:ID"

should be written as

ifA (constA True) (getAttrValue "rdf:about") (getAttrValue "rdf:ID")

Depending of what you want to archive, you should use derived functions of ifA like guards.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top