(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 |