Держись, я могу сделать твою жизнь намного проще.Исходя из вашего имени файла "starbucks.sxml", похоже, что вы уже используете пакет sxml racket.Если это так, то вы также можете использовать часть этой библиотеки 'sxpath', чтобы значительно упростить ваш код:
#lang racket
(require (planet lizorkin/sxml:2:1/sxpath))
(define tree (file->value "/tmp/starbucks.sxml"))
(define artifact-filter (sxpath '(opm:artifact)))
(artifact-filter tree)
Возвращает список узлов opm: artifact (включая все, что находится внутри них).Например, когда я запустил его на фрагменте, который вы указали выше (плюс кучу вставленных открытых паренов - они не были сбалансированы - я получил это:
Welcome to DrRacket, version 5.0.2.1--2010-10-27(41c084c/g) [3m].
Language: racket; memory limit: 512 MB.
'((opm:artifact
((id "a1"))
"\n "
(opm:account ((ref "detailedAccount")))
"\n "
(opm:label ((value "order")))
"\n ")
(opm:artifact
((id "a2"))
"\n "
(opm:account ((ref "detailedAccount")))
"\n "
(opm:label ((value "cash")))
"\n "))
Документация для всего sxmlпакет действительно плохой ... возможно, слово "несуществующий" было бы более подходящим словом, если быть честным, люди sxml заинтересованы в поддержке всех схем, а не только ракеток, поэтому их, конечно, можно простить, если они не тратят много времени на написаниедокументация в формате Racket, Scribble.