$archiver
NSKeyedArchiver
$objects
$null
$class
CF$UID
37
NS.objects
CF$UID
2
$class
CF$UID
33
NS.keys
CF$UID
3
CF$UID
4
CF$UID
5
NS.objects
CF$UID
6
CF$UID
7
CF$UID
35
Title
Text
Date
Untitled Snapshot
$class
CF$UID
34
NSAttributes
CF$UID
10
NSDelegate
CF$UID
0
NSString
CF$UID
8
$class
CF$UID
9
NS.string
By default, Ledger uses a human-readable data format, and displays its reports in a manner meant to be read on screen. For the purpose of writing tools which use Ledger, however, it is possible to read and display data using XML. This section documents that format.

The general format used for Ledger data is:

@smallexample <?xml version="1.0"?> <ledger> <xact>...</xact> <xact>...</xact> <xact>...</xact>... </ledger> @end smallexample

The data stream is enclosed in a @samp{ledger} tag, which contains a series of one or more transactions. Each @samp{xact} describes the transaction and contains a series of one or more postings:

@smallexample <xact> <en:date>2004/03/01</en:date> <en:cleared/> <en:code>100</en:code> <en:payee>John Wiegley</en:payee> <en:postings> <posting>...</posting> <posting>...</posting> <posting>...</posting>... </en:postings> </xact> @end smallexample

The date format for @samp{en:date} is always @samp{YYYY/MM/DD}. The @samp{en:cleared} tag is optional, and indicates whether the posting has been cleared or not. There is also an @samp{en:pending} tag, for marking pending postings. The @samp{en:code} and @samp{en:payee} tags both contain whatever text the user wishes.

After the initial transaction data, there must follow a set of postings marked with @samp{en:postings}. Typically these postings will all balance each other, but if not they will be automatically balanced into an account named @samp{<Unknown>}.

Within the @samp{en:postings} tag is a series of one or more @samp{posting}'s, which have the following form:

@smallexample <posting> <tr:account>Expenses:Computer:Hardware</tr:account> <tr:amount> <value type="amount"> <amount> <commodity flags="PT">$</commodity> <quantity>90.00</quantity> </amount> </value> </tr:amount> </posting> @end smallexample

This is a basic posting. It may also be begin with @samp{tr:virtual} and/or @samp{tr:generated} tags, to indicate virtual and auto-generated postings. Then follows the @samp{tr:account} tag, which contains the full name of the account the posting is related to. Colons separate parent from child in an account name.

Lastly follows the amount of the posting, indicated by @samp{tr:amount}. Within this tag is a @samp{value} tag, of which there are four different kinds, each with its own format:

@enumerate @item boolean @item integer @item amount @item balance @end enumerate

The format of a boolean value is @samp{true} or @samp{false} surrounded by a @samp{boolean} tag, for example:

@smallexample <boolean>true</boolean> @end smallexample

The format of an integer value is the numerical value surrounded by an @samp{integer} tag, for example:

@smallexample <integer>12036</integer> @end smallexample

The format of an amount contains two members, the commodity and the quantity. The commodity can have a set of flags that indicate how to display it. The meaning of the flags (all of which are optional) are:

@table @strong @item P The commodity is prefixed to the value. @item S The commodity is separated from the value by a space. @item T Thousands markers are used to display the amount. @item E The format of the amount is European, with period used as a thousands marker, and comma used as the decimal point. @end table

The actual quantity for an amount is an integer of arbitrary size. Ledger uses the GNU multi-precision math library to handle such values. The XML format assumes the reader to be equally capable. Here is an example amount:

@smallexample <value type="amount"> <amount> <commodity flags="PT">$</commodity> <quantity>90.00</quantity> </amount> </value> @end smallexample

Lastly, a balance value contains a series of amounts, each with a different commodity. Unlike the name, such a value does need to balance. It is called a balance because it sums several amounts. For example:

@smallexample <value type="balance"> <balance> <amount> <commodity flags="PT">$</commodity> <quantity>90.00</quantity> </amount> <amount> <commodity flags="TE">DM</commodity> <quantity>200.00</quantity> </amount> </balance> </value> @end smallexample

That is the extent of the XML data format used by Ledger. It will output such data if the @command{xml} command is used, and can read the same data.
$classes
NSMutableString
NSString
NSObject
$classname
NSMutableString
$class
CF$UID
33
NS.keys
CF$UID
11
CF$UID
12
NS.objects
CF$UID
13
CF$UID
30
NSParagraphStyle
NSFont
$class
CF$UID
29
NSAlignment
4
NSLineHeightMultiple
1.1000000238418579
NSTabStops
CF$UID
14
$class
CF$UID
28
NS.objects
CF$UID
15
CF$UID
17
CF$UID
18
CF$UID
19
CF$UID
20
CF$UID
21
CF$UID
22
CF$UID
23
CF$UID
24
CF$UID
25
CF$UID
26
CF$UID
27
$class
CF$UID
16
NSLocation
28
$classes
NSTextTab
NSObject
$classname
NSTextTab
$class
CF$UID
16
NSLocation
56
$class
CF$UID
16
NSLocation
84
$class
CF$UID
16
NSLocation
112
$class
CF$UID
16
NSLocation
140
$class
CF$UID
16
NSLocation
168
$class
CF$UID
16
NSLocation
196
$class
CF$UID
16
NSLocation
224
$class
CF$UID
16
NSLocation
252
$class
CF$UID
16
NSLocation
280
$class
CF$UID
16
NSLocation
308
$class
CF$UID
16
NSLocation
336
$classes
NSArray
NSObject
$classname
NSArray
$classes
NSParagraphStyle
NSObject
$classname
NSParagraphStyle
$class
CF$UID
32
NSName
CF$UID
31
NSSize
14
NSfFlags
16
Courier
$classes
NSFont
NSObject
$classname
NSFont
$classes
NSDictionary
NSObject
$classname
NSDictionary
$classes
KBWordCountingTextStorage
NSTextStorage
NSMutableAttributedString
NSAttributedString
NSObject
$classname
KBWordCountingTextStorage
$class
CF$UID
36
NS.time
267380389.39831501
$classes
NSDate
NSObject
$classname
NSDate
$classes
NSMutableArray
NSArray
NSObject
$classname
NSMutableArray
$top
Snapshots
CF$UID
1
$version
100000