If X2jCharsetReader != nil, it will be used to decode the doc or stream if required
import charset "code.google.com/p/go-charset/charset" ... x2j.X2jCharsetReader = charset.NewReader s, err := x2j.DocToJson(doc)
var X2jCharsetReader func(charset string, input io.Reader) (io.Reader, error)
func ByteDocToJson(doc []byte, recast ...bool) (string, error)
ByteDocToJson - return an XML doc as a JSON string.
If the optional argument 'recast' is 'true', then values will be converted to boolean or float64 if possible.
func ByteDocToMap(doc []byte, recast ...bool) (map[string]interface{}, error)
ByteDocToMap - convert an XML doc into a map[string]interface{}. (This is analogous to unmarshalling a JSON string to map[string]interface{} using json.Unmarshal().)
If the optional argument 'recast' is 'true', then values will be converted to boolean or float64 if possible. Note: recasting is only applied to element values, not attribute values.
func BytePathForTagShortest(doc []byte, key string) (string, error)
Extract the shortest path from all possible paths - from PathsForTag(). Paths are strings using dot-notation.
func BytePathsForTag(doc []byte, key string) ([]string, error)
Get all paths through the doc (in dot-notation) that terminate with the specified tag. Results can be used with ValuesAtTagPath() and ValuesFromTagPath().
func CastNanInf(b bool)
Cast "Nan", "Inf", "-Inf" XML values to 'float64'. By default, these values will be decoded as 'string'.
func DocToJson(doc string, recast ...bool) (string, error)
DocToJson - return an XML doc as a JSON string.
If the optional argument 'recast' is 'true', then values will be converted to boolean or float64 if possible.
func DocToJsonIndent(doc string, recast ...bool) (string, error)
DocToJsonIndent - return an XML doc as a prettified JSON string.
If the optional argument 'recast' is 'true', then values will be converted to boolean or float64 if possible. Note: recasting is only applied to element values, not attribute values.
func DocToMap(doc string, recast ...bool) (map[string]interface{}, error)
DocToMap - convert an XML doc into a map[string]interface{}. (This is analogous to unmarshalling a JSON string to map[string]interface{} using json.Unmarshal().)
If the optional argument 'recast' is 'true', then values will be converted to boolean or float64 if possible. Note: recasting is only applied to element values, not attribute values.
func DocValue(doc, path string, attrs ...string) (interface{}, error)
DocValue - return a value for a specific tag
'doc' is a valid XML message. 'path' is a hierarchy of XML tags, e.g., "doc.name". 'attrs' is an OPTIONAL list of "name:value" pairs for attributes. Note: 'recast' is not enabled here. Use DocToMap(), NewAttributeMap(), and MapValue() calls for that.
func MapValue(m map[string]interface{}, path string, attr map[string]interface{}, r ...bool) (interface{}, error)
MapValue - retrieves value based on walking the map, 'm'.
'm' is the map value of interest. 'path' is a period-separated hierarchy of keys in the map. 'attr' is a map of attribute "name:value" pairs from NewAttributeMap(). May be 'nil'. If the path can't be traversed, an error is returned. Note: the optional argument 'r' can be used to coerce attribute values, 'attr', if done so for 'm'.
func NewAttributeMap(kv ...string) (map[string]interface{}, error)
NewAttributeMap() - generate map of attributes=value entries as map["-"+string]string.
'kv' arguments are "name:value" pairs that appear as attributes, name="value". If len(kv) == 0, the return is (nil, nil).
func PathForKeyShortest(m map[string]interface{}, key string) string
Extract the shortest path from all possible paths - from PathsForKey(). Paths are strings using dot-notation.
func PathForTagShortest(doc string, key string) (string, error)
Extract the shortest path from all possible paths - from PathsForTag(). Paths are strings using dot-notation.
func PathsForKey(m map[string]interface{}, key string) []string
Get all paths through the map (in dot-notation) that terminate with the specified key. Results can be used with ValuesAtKeyPath() and ValuesFromKeyPath().
func PathsForTag(doc string, key string) ([]string, error)
Get all paths through the doc (in dot-notation) that terminate with the specified tag. Results can be used with ValuesAtTagPath() and ValuesFromTagPath().
func ReaderValuesForTag(rdr io.Reader, tag string) ([]interface{}, error)
ReaderValuesForTag - io.Reader version of ValuesForTag()
func ReaderValuesFromTagPath(rdr io.Reader, path string, getAttrs ...bool) ([]interface{}, error)
ReaderValuesFromTagPath - io.Reader version of ValuesFromTagPath()
func ToJson(rdr io.Reader, recast ...bool) (string, error)
ToJson() - parse a XML io.Reader to a JSON string
func ToJsonIndent(rdr io.Reader, recast ...bool) (string, error)
ToJsonIndent - the pretty form of ReaderToJson
func ToMap(rdr io.Reader, recast ...bool) (map[string]interface{}, error)
ToMap() - parse a XML io.Reader to a map[string]interface{}
func Unmarshal(doc []byte, v interface{}) error
Unmarshal - wraps xml.Unmarshal with handling of map[string]interface{} and string type variables.
Usage: x2j.Unmarshal(doc,&m) where m of type map[string]interface{} x2j.Unmarshal(doc,&s) where s of type string (Overrides xml.Unmarshal().) x2j.Unmarshal(doc,&struct) - passed to xml.Unmarshal() x2j.Unmarshal(doc,&slice) - passed to xml.Unmarshal()
func ValuesAtKeyPath(m map[string]interface{}, path string, getAttrs ...bool) []interface{}
ValuesAtKeyPath - deliver all values at the same depth in a map[string]interface{} value
If v := ValuesAtKeyPath(m,"x.y.z") then there exists a _,vv := range v such that v.(map[string]interface{})[z] == ValuesFromKeyPath(m,"x.y.z")
If there are no values for the path 'nil' is returned.
'm' is the map to be walked 'path' is a dot-separated path of key values 'getAttrs' can be set 'true' to return attribute values for "*"-terminated path If a node is '*', then everything beyond is walked. E.g., see ValuesFromTagPath documentation.
func ValuesAtTagPath(doc, path string, getAttrs ...bool) ([]interface{}, error)
ValuesAtTagPath - deliver all values at the same level of the document as the specified key.
See ValuesAtKeyPath().
If there are no values for the path 'nil' is returned. A return value of (nil, nil) means that there were no values and no errors parsing the doc.
'doc' is the XML document 'path' is a dot-separated path of tag nodes 'getAttrs' can be set 'true' to return attribute values for "*"-terminated path If a node is '*', then everything beyond is scanned for values. E.g., "doc.books' might return a single value 'book' of type []interface{}, but "doc.books.*" could return all the 'book' entries as []map[string]interface{}. "doc.books.*.author" might return all the 'author' tag values as []string - or "doc.books.*.author.lastname" might be required, depending on he schema.
func ValuesForKey(m map[string]interface{}, key string) []interface{}
ValuesForKey - return all values in map associated with 'key'
Returns nil if the 'key' does not occur in the map
func ValuesForTag(doc, tag string) ([]interface{}, error)
ValuesForTag - return all values in doc associated with 'tag'.
Returns nil if the 'tag' does not occur in the doc. If there is an error encounted while parsing doc, that is returned. If you want values 'recast' use DocToMap() and ValuesForKey().
func ValuesFromKeyPath(m map[string]interface{}, path string, getAttrs ...bool) []interface{}
ValuesFromKeyPath - deliver all values for a path node from a map[string]interface{} If there are no values for the path 'nil' is returned.
'm' is the map to be walked 'path' is a dot-separated path of key values 'getAttrs' can be set 'true' to return attribute values for "*"-terminated path If a node is '*', then everything beyond is walked. E.g., see ValuesFromTagPath documentation.
func ValuesFromTagPath(doc, path string, getAttrs ...bool) ([]interface{}, error)
ValuesFromTagPath - deliver all values for a path node from a XML doc If there are no values for the path 'nil' is returned. A return value of (nil, nil) means that there were no values and no errors parsing the doc.
'doc' is the XML document 'path' is a dot-separated path of tag nodes 'getAttrs' can be set 'true' to return attribute values for "*"-terminated path If a node is '*', then everything beyond is scanned for values. E.g., "doc.books' might return a single value 'book' of type []interface{}, but "doc.books.*" could return all the 'book' entries as []map[string]interface{}. "doc.books.*.author" might return all the 'author' tag values as []string - or "doc.books.*.author.lastname" might be required, depending on he schema.
func WriteMap(m interface{}, offset ...int) string
WriteMap - dumps the map[string]interface{} for examination.
'offset' is initial indentation count; typically: WriteMap(m). NOTE: with XML all element types are 'string'. But code written as generic for use with maps[string]interface{} values from json.Unmarshal(). Or it can handle a DocToMap(doc,true) result where values have been recast'd.
func XmlBufferToJson(b *bytes.Buffer, recast ...bool) (string, error)
XmlBufferToJson - process XML message from a bytes.Buffer
'b' is the buffer Optional argument 'recast' coerces values to float64 or bool where possible.
func XmlBufferToMap(b *bytes.Buffer, recast ...bool) (map[string]interface{}, error)
XmlBufferToMap - process XML message from a bytes.Buffer
'b' is the buffer Optional argument 'recast' coerces map values to float64 or bool where possible.
func XmlMsgsFromFile(fname string, phandler func(map[string]interface{}) bool, ehandler func(error) bool, recast ...bool) error
XmlMsgsFromFile()
'fname' is name of file 'phandler' is the map processing handler. Return of 'false' stops further processing. 'ehandler' is the parsing error handler. Return of 'false' stops further processing and returns error. Note: phandler() and ehandler() calls are blocking, so reading and processing of messages is serialized. This means that you can stop reading the file on error or after processing a particular message. To have reading and handling run concurrently, pass arguments to a go routine in handler and return true.
func XmlMsgsFromFileAsJson(fname string, phandler func(string) bool, ehandler func(error) bool, recast ...bool) error
XmlMsgsFromFileAsJson()
'fname' is name of file 'phandler' is the JSON string processing handler. Return of 'false' stops further processing. 'ehandler' is the parsing error handler. Return of 'false' stops further processing and returns error. Note: phandler() and ehandler() calls are blocking, so reading and processing of messages is serialized. This means that you can stop reading the file on error or after processing a particular message. To have reading and handling run concurrently, pass arguments to a go routine in handler and return true.
func XmlMsgsFromReader(rdr io.Reader, phandler func(map[string]interface{}) bool, ehandler func(error) bool, recast ...bool) error
XmlMsgsFromReader() - io.Reader version of XmlMsgsFromFile
'rdr' is an io.Reader for an XML message (stream) 'phandler' is the map processing handler. Return of 'false' stops further processing. 'ehandler' is the parsing error handler. Return of 'false' stops further processing and returns error. Note: phandler() and ehandler() calls are blocking, so reading and processing of messages is serialized. This means that you can stop reading the file on error or after processing a particular message. To have reading and handling run concurrently, pass arguments to a go routine in handler and return true.
func XmlMsgsFromReaderAsJson(rdr io.Reader, phandler func(string) bool, ehandler func(error) bool, recast ...bool) error
XmlMsgsFromReaderAsJson() - io.Reader version of XmlMsgsFromFileAsJson
'rdr' is an io.Reader for an XML message (stream) 'phandler' is the JSON string processing handler. Return of 'false' stops further processing. 'ehandler' is the parsing error handler. Return of 'false' stops further processing and returns error. Note: phandler() and ehandler() calls are blocking, so reading and processing of messages is serialized. This means that you can stop reading the file on error or after processing a particular message. To have reading and handling run concurrently, pass arguments to a go routine in handler and return true.