所以我正在解析这个 XML 文件。一旦我到达其中的一个节点,我就有一个子节点用于代码,一个用于描述,一个或多个(孙子)节点保留外部节点引用。
我首先尝试了简单的箭头符号和 <+> 聚合来获取我想要的所有信息,但这只是弹出了一个大列表,我想也许有一种更优雅的方式来实现这一点
所以我尝试了箭头符号,并让代码看起来像这样:
import Text.XML.HXT.Core
getDocument cale = readDocument [withValidate no] cale
atName name=deep (hasName name)
text = getChildren>>>getText
getList = deep (hasName "list-info")>>>
proc x -> do
desc <- text <<< atName "desc" -< x
code <- text <<< atName "code" -< x
refs <- getAttrValue "idref" <<< deep (hasName "service-id-ref") -< x
returnA -< (desc,code,refs)
就我对这个过滤器的理解而言,基本上 deep 应该返回同一级别的所有“service-id-ref”节点,但第一个满足“list-info”名称的节点有 2 个“service-id-ref”子节点2 个不同的孙子节点和 refs 上的节点每次只绑定到第一个。所以基本上我期待 (String,String,[String]) 的 3 元组,但我得到的只是 3 个普通字符串。
是因为我对 do-notation(或一般而言)中的箭头理解不佳,还是我应该尝试以其他方式绑定 refs?
提前致谢