Так что я анализирую этот файл 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)
В основном глубокий должен возвращать все узлы "service-id-ref" на одном уровне, насколько мне известно об этом фильтре, но первый узел, удовлетворяющий имени "list-info", имеет 2Дочерние узлы "service-id-ref" на 2 разных дочерних узлах grand-grand и refs связаны только с первым каждый раз.В общем, я ожидал три кортежа (String, String, [String]), но все, что я получил, это 3 нормальные строки.
Это из-за моего плохого понимания стрелок в нотации (или вообще) или я должен попытаться привязать ссылки другим способом?
Заранее спасибо