An adapter for converting Transactions into XElements, and vice-versa.
        private void SaveTransactions(List<Transaction> transactions)
        {
            Uri accountUri = new Uri("/Accounts/Transactions/Transactions.xml", UriKind.Relative);

            using (Package package = ZipPackage.Open(this.FilePath, System.IO.FileMode.OpenOrCreate)) {
                // Either get the existing PackagePart or create a new one
                PackagePart accountPart = null;
                if (package.PartExists(accountUri)) {
                    accountPart = package.GetPart(accountUri);
                } else {
                    accountPart = package.CreatePart(accountUri, "text/xml");
                }

                XElement resultingXElement = new XElement("Transactions");

                TransactionXElementAdapter adapter = new TransactionXElementAdapter();
                foreach (Transaction transaction in transactions) {
                    resultingXElement.Add(adapter.ToXElement(transaction));
                }

                using (StreamWriter sw = new StreamWriter(accountPart.GetStream())) {
                    sw.Write(resultingXElement.ToString());
                }
            }
        }
        private List<Transaction> ReadTransactions(Workbook workbook, Account account)
        {
            List<Transaction> results = new List<Transaction>();
            Uri accountUri = new Uri("/Accounts/Transactions/Transactions.xml", UriKind.Relative);

            using (Package package = ZipPackage.Open(this.FilePath, System.IO.FileMode.OpenOrCreate)) {
                if (package.PartExists(accountUri)) {
                    PackagePart accountPart = package.GetPart(accountUri);
                    using (StreamReader reader = new StreamReader(accountPart.GetStream())) {
                        XElement transactions = XElement.Load(reader);
                        TransactionXElementAdapter adapter = new TransactionXElementAdapter();
                        foreach (XElement transaction in transactions.Nodes()) {
                            Transaction fetchedTransaction = adapter.FromXElement(transaction, workbook);
                            if (account == null || fetchedTransaction.CreditAccount == account || fetchedTransaction.DebitAccount == account) {
                                results.Add(fetchedTransaction);
                            }
                        }
                    }
                }
            }
            return results;
        }