本文整理匯總了Golang中github.com/moovweb/gokogiri/xml.Node.Attributes方法的典型用法代碼示例。如果您正苦於以下問題:Golang Node.Attributes方法的具體用法?Golang Node.Attributes怎麽用?Golang Node.Attributes使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/moovweb/gokogiri/xml.Node
的用法示例。
在下文中一共展示了Node.Attributes方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: unmarshal
//.........這裏部分代碼省略.........
v.Set(new)
}
v.SetLen(n + 1)
// Recur to read element into slice.
if err := p.unmarshal(v.Index(n), start); err != nil {
v.SetLen(n)
return err
}
return nil
case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.String:
if err := copyValue(v, start.Content()); err != nil {
return err
}
case reflect.Struct:
typ := v.Type()
if typ == nameType {
v.Set(reflect.ValueOf(xml.Name{Local: start.Name()}))
break
}
if typ == timeType {
if err := copyValue(v, start.Content()); err != nil {
return err
}
break
}
sv = v
tinfo, err = getTypeInfo(typ)
if err != nil {
return err
}
// Validate and assign element name.
if tinfo.xmlname != nil {
// var space string
finfo := tinfo.xmlname
if finfo.name != "" && finfo.name != start.Name() {
return UnmarshalError("expected element type <" + finfo.name + "> but have <" + start.Name() + ">")
}
fv := sv.FieldByIndex(finfo.idx)
if _, ok := fv.Interface().(xml.Name); ok {
fv.Set(reflect.ValueOf(xml.Name{Local: start.Name()}))
}
}
var saveComment reflect.Value
var doSaveComment = false
_ = saveComment
for i := range tinfo.fields {
finfo := &tinfo.fields[i]
switch finfo.flags & fMode {
case fAttr:
strv := sv.FieldByIndex(finfo.idx)
for name, a := range start.Attributes() {
if name == finfo.name {
copyValue(strv, a.Content())
}
}
case fCharData:
strv := sv.FieldByIndex(finfo.idx)
copyValue(strv, start.Content())
case fInnerXml:
strv := sv.FieldByIndex(finfo.idx)
// TODO: Not sure why i need to call FirstChild() here.
copyValue(strv, start.FirstChild().String())
case fComment:
if !doSaveComment {
doSaveComment = true
saveComment = sv.FieldByIndex(finfo.idx)
}
}
}
for cur_node := start.FirstChild(); cur_node != nil; cur_node = cur_node.NextSibling() {
if sv.IsValid() {
if cur_node.NodeType() != gokoxml.XML_ELEMENT_NODE {
if doSaveComment && cur_node.NodeType() == gokoxml.XML_COMMENT_NODE {
copyValue(saveComment, cur_node.Content())
}
continue
}
err = p.unmarshalPath(tinfo, sv, nil, cur_node)
if err != nil {
return err
}
}
}
} // switch v := val; v.Kind() {
return nil
}