歡迎您光臨本站 註冊首頁

為 Open Financial Exchange 文件添加 XML 功能

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
如今一些金融機構允許客戶下載文件並導入到客戶自己所選的財務程序包中,這讓日常的記帳任務變得多少有些簡單了。但是,這些文件卻給財務程序員帶來了問題,因為它們往往僅對 Open Financial Exchange (OFX) 格式可用,而這種格式並不是 XML 兼容的。通過本文,了解如何使用 PHP 及字元串替代使 OFX 文件可以與 XML 兼容。利用 XML 解析的強大功能以及對 OFX 文件的解構使財務編程更為精確。

我的銀行為我這個財務程序員和記帳員提供了一種非常有用的服務:我能下載一個小文件來列出一段指定時期內我帳戶上的所有交易。該文件包含了帳戶名和帳戶號;帳戶類型(支票、儲蓄或是其他類型);有關金融機構的信息;帳戶的餘額信息;我請求的日期和時間;帳戶所執行交易的完整列表,其中顯示了交易是存還是支、金額以及交易的日期和時間。銀行為我做了很多數據輸入的工作:我所需要做的只是通過編程將其傳遞到我的本地記錄,提高了準確性並簡化了對帳的過程。

常用縮寫詞
  • CSV - 以逗號分割的值
  • GNU:GNU's Not UNIX®
  • HTML:超文本標記語言(Hypertext Markup Language)
  • W3C:萬維網聯盟(World Wide Web Consortium)
  • XML:可擴展標記語言(Extensible Markup Language)

當我登錄到銀行的 Web 站點並開始下載包含與我的帳戶相關的交易時,我可以選擇是使用一個 CSV 文件,還是面向 Quicken、Intuit QuickBooks、Microsoft® Money 或 Simply Accounting 的一個文件。出於各種原因,我選擇不使用主流的財務程序,而是使用我自己的雲計算應用程序,因此我要麼必須使用純 CSV 選項,要麼需要解構其他一種下載。

雖然 CSV 文件可被快速下載到資料庫或電子表格,但是其他的文件格式也具有某些特定的優勢。所有其他可選文件實際上都是相同的文件,只是具有不同的文件擴展名以適合相應的包。該文件是一個 OFX 格式的純文本文檔(更多信息的鏈接,參見 參考資料),這種結構的設計就是為了在進行銀行和其他財務交易時提供有效的信息而且更為準確。總體而言,更為專業的做法是使用 OFX 提供的額外信息來確保交易能被正確解析 — 而這些用 CSV 是無法實現的。

問題是 OFX 版本 1 雖然初看上去是 XML 格式的,但實際上它只是非常接近於 XML。如果試圖將文件直接讀入一個 XML 解析器,就會導致錯誤。如果文件是真正的 XML 格式(正如 OFX 版本 2 那樣),就可以使用編程語言(比如 PHP)中內置函數的強大功能來更快更輕鬆地解析信息。不過,我的銀行 — 可能很多其他銀行也是如此 — 只能提供 OFX 版本 1.xx 文件。

一個例子

如下,是版本 1 文件的一個例子,清單 1 是直接下載后的版本,清單 2 是改進后的版本。我用粗體 標註了一些有用的添加和更改以使其更易於讀懂。此文件只包含了一個帳戶,該帳戶具有兩筆交易:一支(借)、一存(貸)。


清單 1. 直接下載的 OFX 文件
							    OFXHEADER:100  DATA:OFXSGML  VERSION:102  SECURITY:TYPE1  ENCODING:USASCII  CHARSET:1252  COMPRESSION:NONE  OLDFILEUID:NONE  NEWFILEUID:NONE      <OFX>  <SIGNONMSGSRSV1>  <SONRS>  <STATUS>  <CODE>0  <SEVERITY>INFO  <MESSAGE>OK  </STATUS>  <DTSERVER>20090211000000[-5:EST]  <USERKEY>--NoUserKey--  <LANGUAGE>ENG  <INTU.BID>00002  </SONRS>  </SIGNONMSGSRSV1>  <BANKMSGSRSV1>  <STMTTRNRS>  <TRNUID>XXXX - 20090211000000  <STATUS>  <CODE>0  <SEVERITY>INFO  <MESSAGE>OK  </STATUS>  <STMTRS>  <CURDEF>CAD  <BANKACCTFROM>  <BANKID>000000000  <ACCTID>000000  <ACCTTYPE>CHECKING  </BANKACCTFROM>  <BANKTRANLIST>  <DTSTART>20090209  <DTEND>20090209000000[-5:EST]  <STMTTRN>  <TRNTYPE>DEBIT  <DTPOSTED>20090209000000[-5:EST]  <TRNAMT>-98.91  <FITID>00000000000000000000000000  <NAME>GROCER A & Z  </STMTTRN>  <STMTTRN>  <TRNTYPE>CREDIT  <DTPOSTED>20090209000000[-5:EST]  <TRNAMT>308.86  <FITID>00000000000000000000000000  <NAME>DEPOSIT    000000  </STMTTRN>  </BANKTRANLIST>  <LEDGERBAL>  <BALAMT>256.94  <DTASOF>20090209000000[-5:EST]  </LEDGERBAL>  <AVAILBAL>  <BALAMT>256.94  <DTASOF>20090211000000[-5:EST]  </AVAILBAL>  </STMTRS>  </STMTTRNRS>  </BANKMSGSRSV1>  </OFX>  



[火星人 ] 為 Open Financial Exchange 文件添加 XML 功能已經有416次圍觀

http://coctec.com/docs/linux/show-post-68918.html