parse xml using the encoding declared in xml header
This commit is contained in:
@@ -5,9 +5,10 @@ import (
|
|||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
|
||||||
|
"golang.org/x/net/html/charset"
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// gnucashDatabaseReader defines the structure of gnucash database reader
|
// gnucashDatabaseReader defines the structure of gnucash database reader
|
||||||
@@ -37,14 +38,14 @@ func createNewGnuCashDatabaseReader(data []byte) (*gnucashDatabaseReader, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
xmlDecoder := xml.NewDecoder(gzipReader)
|
xmlDecoder := xml.NewDecoder(gzipReader)
|
||||||
xmlDecoder.CharsetReader = utils.IdentReader
|
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||||
|
|
||||||
return &gnucashDatabaseReader{
|
return &gnucashDatabaseReader{
|
||||||
xmlDecoder: xmlDecoder,
|
xmlDecoder: xmlDecoder,
|
||||||
}, nil
|
}, nil
|
||||||
} else if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
} else if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
||||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||||
xmlDecoder.CharsetReader = utils.IdentReader
|
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||||
|
|
||||||
return &gnucashDatabaseReader{
|
return &gnucashDatabaseReader{
|
||||||
xmlDecoder: xmlDecoder,
|
xmlDecoder: xmlDecoder,
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
|
||||||
|
"golang.org/x/net/html/charset"
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ofxFileReader defines the structure of open financial exchange (ofx) file reader
|
// ofxFileReader defines the structure of open financial exchange (ofx) file reader
|
||||||
@@ -30,7 +31,7 @@ func (r *ofxFileReader) read(ctx core.Context) (*ofxFile, error) {
|
|||||||
func createNewOFXFileReader(data []byte) (*ofxFileReader, error) {
|
func createNewOFXFileReader(data []byte) (*ofxFileReader, error) {
|
||||||
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // ofx 2.x starts with <?xml
|
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // ofx 2.x starts with <?xml
|
||||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||||
xmlDecoder.CharsetReader = utils.IdentReader
|
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||||
|
|
||||||
return &ofxFileReader{
|
return &ofxFileReader{
|
||||||
xmlDecoder: xmlDecoder,
|
xmlDecoder: xmlDecoder,
|
||||||
@@ -39,7 +40,7 @@ func createNewOFXFileReader(data []byte) (*ofxFileReader, error) {
|
|||||||
|
|
||||||
} else if len(data) > 5 && string(data[0:5]) == "<OFX>" { // no ofx header
|
} else if len(data) > 5 && string(data[0:5]) == "<OFX>" { // no ofx header
|
||||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||||
xmlDecoder.CharsetReader = utils.IdentReader
|
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||||
|
|
||||||
return &ofxFileReader{
|
return &ofxFileReader{
|
||||||
xmlDecoder: xmlDecoder,
|
xmlDecoder: xmlDecoder,
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/net/html/charset"
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/log"
|
"github.com/mayswind/ezbookkeeping/pkg/log"
|
||||||
@@ -128,7 +130,7 @@ func (e *NationalBankOfPolandDataSource) Parse(c core.Context, content []byte) (
|
|||||||
nationalBankOfPolandData := &NationalBankOfPolandExchangeRateData{}
|
nationalBankOfPolandData := &NationalBankOfPolandExchangeRateData{}
|
||||||
|
|
||||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(content))
|
xmlDecoder := xml.NewDecoder(bytes.NewReader(content))
|
||||||
xmlDecoder.CharsetReader = utils.IdentReader
|
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||||
err := xmlDecoder.Decode(&nationalBankOfPolandData)
|
err := xmlDecoder.Decode(&nationalBankOfPolandData)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -125,8 +125,3 @@ func GetFileNameExtension(path string) string {
|
|||||||
|
|
||||||
return extension[1:]
|
return extension[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
// IdentReader returns the original io reader
|
|
||||||
func IdentReader(encoding string, input io.Reader) (io.Reader, error) {
|
|
||||||
return input, nil
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user