(require (planet "ssax.ss" ("lizorkin" "ssax.plt" 1 3)) (only (lib "list.ss") quicksort) (lib "list.ss")) ; this must go in place of the bare <gnc-v2> tag in the file... (define insert-this-text #<<| <gnc-v2 xmlns:gnc="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#gnc" xmlns:book="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#book" xmlns:cd="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#cd" xmlns:act="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/account-v2.dtdt#act" xmlns:trn="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/transactions-v2.dtd#trn" xmlns:split="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/transactions-v2.dtdt#split" xmlns:cmdty="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/comodity-v2.dtd#cmdty" xmlns:ts="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/types.dtd#ts" xmlns:slots="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/types.dtd#slots" xmlns:slot="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/types.dtd#slot" xmlns:price="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/prices-v1.dtd#price" xmlns:pricedb="http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/prices-v1.dtd#pricedb"> | ) (define all (time (ssax:xml->sxml (open-input-file "~/clements/collects/gnucash/Mugwort-gnucash") '()))) (define elts (match all [`(*TOP* (@ . ,top-attribs) (gnc-v2 ,count-data (,book-tag (@ . ,book-attribs) . ,content))) content])) (define book-id-tag (string->symbol "http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#book:id")) (define count-data-tag (string->symbol "http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#gnc:count-data")) (define commodity-tag (string->symbol "http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#gnc:commodity")) (define pricedb-tag (string->symbol "http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#gnc:pricedb")) (define account-tag (string->symbol "http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#gnc:account")) (define transaction-tag (string->symbol "http://www.gnucash.org/lxr/gnucash/source/src/doc/xml/io-gncxml-version-2.dtd#gnc:transaction")) (define (tag-filter tag elts) (filter (lambda (elt) (eq? (car elt) tag)) elts)) (define book-ids (tag-filter book-id-tag elts)) (define count-data (tag-filter count-data-tag elts)) (define commodities (tag-filter commodity-tag elts)) (define accounts (tag-filter account-tag elts)) (define transactions (tag-filter account-tag elts)) (define (transaction-date transaction) (unless (eq? (car transaction) transaction-tag) (error 'transaction-date "not a transaction: ~v" transaction)) (let ([date-fields (tag-filter ,date-entered-tag (sxml-elts transaction))]) (unless (and (pair? date-fields) (null? (cdr date-fields))) (error 'transaction-date "no entered date found for transaction: ~v" transaction)))) ;; hmm... off to read up on sxml.
| CookbookForm | |
|---|---|
| TopicType: | Recipe |
| ParentTopic: | |
| TopicOrder: | 999 |