【问题标题】:Test if it exists a node HXT测试是否存在节点HXT
【发布时间】:2014-04-08 11:14:40
【问题描述】:

有没有办法测试节点(属性值)并将其与我的 if-condition 一起使用? 例如:

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}

在该示例中,我想测试一个属性值,如果它存在,则返回我的 then 条件,否则返回 else 条件! 我看到了 XMLArrow 的 API,它存在一些能够做到这一点的函数(例如,isAttrib 或 hasAttrib)但它不返回布尔值...... 所以......我想到了解决它的其他方法,但我认为必须有一个更简单的解决方案来解决这个问题...... 有人可以给我一个提示吗?

【问题讨论】:

    标签: haskell if-statement attributes arrows hxt


    【解决方案1】:

    您可以使用hxt包的Control.Arrow.ArrowIf模块的功能。在这里您可以找到函数ifA,它是 if-else-statement 的提升版本。例如代码

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

    应该写成

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

    根据您要归档的内容,您应该使用ifA 的派生函数,例如guards

    【讨论】:

    • 我想要的是测试它是否存在一个具有属性“rdf:about”的节点,如果它确实存在则从那里获取值!否则,测试它是否存在具有 ref:ID 属性的节点!如果它存在,则返回该属性的值!
    • 我想我成功了! :) 谢谢 ! :)
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2021-07-03
    • 2017-06-03
    相关资源
    最近更新 更多