當前位置: 首頁>>代碼示例>>Golang>>正文


Golang Node.Attributes方法代碼示例

本文整理匯總了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
}
開發者ID:pcdummy,項目名稱:golxml,代碼行數:101,代碼來源:xml.go


注:本文中的github.com/moovweb/gokogiri/xml.Node.Attributes方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。