diff --git a/requests.go b/requests.go index e36fe87..3b881f3 100644 --- a/requests.go +++ b/requests.go @@ -1,7 +1,6 @@ package gowebdav import ( - "encoding/xml" "errors" "fmt" "io" @@ -60,16 +59,7 @@ func (c *Client) Propfind(path string, self bool, body string, resp interface{}, return errors.New(fmt.Sprintf("%s - %s %s", rs.Status, rq.Method, rq.URL.String())) } - decoder := xml.NewDecoder(rs.Body) - for t, _ := decoder.Token(); t != nil; t, _ = decoder.Token() { - switch se := t.(type) { - case xml.StartElement: - if se.Name.Local == "response" { - if e := decoder.DecodeElement(resp, &se); e == nil { - parse(resp) - } - } - } - } + parseXML(rs.Body, resp, parse) + return nil } diff --git a/utils.go b/utils.go index f43bd0f..dff9112 100644 --- a/utils.go +++ b/utils.go @@ -2,6 +2,7 @@ package gowebdav import ( "bytes" + "encoding/xml" "io" "strconv" "strings" @@ -31,3 +32,17 @@ func parseModified(s *string) time.Time { } return time.Unix(0, 0) } + +func parseXML(data io.Reader, resp interface{}, parse func(resp interface{})) { + decoder := xml.NewDecoder(data) + for t, _ := decoder.Token(); t != nil; t, _ = decoder.Token() { + switch se := t.(type) { + case xml.StartElement: + if se.Name.Local == "response" { + if e := decoder.DecodeElement(resp, &se); e == nil { + parse(resp) + } + } + } + } +}