• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Golang xmlx.Node类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Golang中github.com/go-forks/xmlx.Node的典型用法代码示例。如果您正苦于以下问题:Golang Node类的具体用法?Golang Node怎么用?Golang Node使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了Node类的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。

示例1: moveNode

func moveNode(xn, parent *xmlx.Node, parentName string) (newParent *xmlx.Node, oldPos int) {
	oldPos = -1
	if root := srcDoc.Root.Children[0]; parent == nil {
		if parent = subNode(root, parentName); parent == nil {
			parent = xmlx.NewNode(xn.Type)
			parent.Name.Local = parentName
			parent.Parent = root
			root.Children = append(root.Children, parent)
		}
	}
	if xn.Parent != parent {
		newParent = parent
		if xn.Parent != nil {
			for i, sn := range xn.Parent.Children {
				if sn == xn {
					oldPos = i
					break
				}
			}
			if oldPos >= 0 {
				xn.Parent.Children[oldPos] = nil
			}
		}
		xn.Parent = parent
		parent.Children = append(parent.Children, xn)
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:28,代码来源:convert.go


示例2: ensureChild

func ensureChild(xn *xmlx.Node, name string) (sn *xmlx.Node) {
	if sn = subNode(xn, name); sn == nil {
		sn = xmlx.NewNode(xn.Type)
		sn.Name.Local = name
		xn.AddChild(sn)
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:convert.go


示例3: ensureSiblings

func ensureSiblings(xn *xmlx.Node, namesVals map[string]string) {
	var sn *xmlx.Node
	for n, v := range namesVals {
		if sn = subNode(xn.Parent, n); sn == nil {
			sn = xmlx.NewNode(xn.Type)
			sn.Name.Local = n
			xn.Parent.AddChild(sn)
		}
		sn.Value = v
	}
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:11,代码来源:convert.go


示例4: replaceNode

func replaceNode(xn, nn *xmlx.Node) {
	pos := -1
	for i, sn := range xn.Parent.Children {
		if sn == xn {
			pos = i
			break
		}
	}
	if pos >= 0 {
		xn.Parent.Children[pos] = nn
		nn.Parent = xn.Parent
		xn.Parent = nil
	}
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:14,代码来源:convert.go


示例5: xu64

func xu64(xn *xmlx.Node, name string) (v uint64) {
	if v = xn.U64(xmlns, name); v == 0 {
		if v = xn.U64("", name); v == 0 {
			v = xn.U64("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:helpers.go


示例6: xs

func xs(xn *xmlx.Node, name string) (v string) {
	if v = xn.S(xmlns, name); len(v) == 0 {
		if v = xn.S("", name); len(v) == 0 {
			v = xn.S("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:helpers.go


示例7: xf64

func xf64(xn *xmlx.Node, name string) (v float64) {
	if v = xn.F64(xmlns, name); v == 0 {
		if v = xn.F64("", name); v == 0 {
			v = xn.F64("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:helpers.go


示例8: attValU64

func attValU64(xn *xmlx.Node, name string) (val uint64) {
	if val = xn.Au64(ns, name); val == 0 {
		if val = xn.Au64("", name); val == 0 {
			val = xn.Au64("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:convert.go


示例9: attVal

func attVal(xn *xmlx.Node, name string) (val string) {
	if val = xn.As(ns, name); len(val) == 0 {
		if val = xn.As("", name); len(val) == 0 {
			val = xn.As("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:convert.go


示例10: subNodes

func subNodes(xn *xmlx.Node, name string) (sn []*xmlx.Node) {
	if sn = xn.SelectNodes(ns, name); len(sn) == 0 {
		if sn = xn.SelectNodes("", name); len(sn) == 0 {
			sn = xn.SelectNodes("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:convert.go


示例11: xcn

func xcn(xn *xmlx.Node, name string) (cn *xmlx.Node) {
	if cn = xn.SelectNode(xmlns, name); cn == nil {
		if cn = xn.SelectNode("", name); cn == nil {
			cn = xn.SelectNode("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:helpers.go


示例12: subNode

func subNode(xn *xmlx.Node, name string) (sn *xmlx.Node) {
	if sn = xn.SelectNode(ns, name); sn == nil {
		if sn = xn.SelectNode("", name); sn == nil {
			sn = xn.SelectNode("*", name)
		}
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:8,代码来源:convert.go


示例13: setAttr

func setAttr(xn *xmlx.Node, name, value string, onlySetIfEmpty bool) {
	for _, att := range xn.Attributes {
		if att.Name.Local == name {
			if (!onlySetIfEmpty) || (len(att.Value) == 0) {
				logFmt("\t\tsetAttr %s.%s = %s\n", xn.Name.Local, name, value)
				att.Value = value
			}
			return
		}
	}
	logFmt("\t\taddAttr %s.%s = %s\n", xn.Name.Local, name, value)
	att := &xmlx.Attr{Value: value}
	att.Name.Local = name
	xn.Attributes = append(xn.Attributes, att)
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:15,代码来源:convert.go


示例14: delAttr

func delAttr(xn *xmlx.Node, name string) {
	if Strict {
		pos := -1
		for i, att := range xn.Attributes {
			if att.Name.Local == name {
				pos = i
				break
			}
		}
		if pos >= 0 {
			logFmt("\t\tdelAttr %s.%s\n", xn.Name.Local, name)
			nuAtts := append(xn.Attributes[:pos], xn.Attributes[pos+1:]...)
			xn.Attributes = nuAtts
		}
	}
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:16,代码来源:convert.go


示例15: xcns

func xcns(xn *xmlx.Node, names ...string) (cns []*xmlx.Node) {
	if len(names) == 1 {
		if cns = xn.SelectNodes(xmlns, names[0]); len(cns) == 0 {
			if cns = xn.SelectNodes("", names[0]); len(cns) == 0 {
				cns = xn.SelectNodes("*", names[0])
			}
		}
	} else {
		var scns []*xmlx.Node
		for _, n := range names {
			if scns = xcns(xn, n); len(scns) > 0 {
				cns = append(cns, scns...)
			}
		}
	}
	if len(cns) > 0 && cns[0].Parent == xn.Parent {
		cns = cns[1:]
	}
	return
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:20,代码来源:helpers.go


示例16: xb

func xb(xn *xmlx.Node, name string) bool {
	return xn.B(xmlns, name) || xn.B("", name) || xn.B("*", name)
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:3,代码来源:helpers.go


示例17: processNode

func processNode(xn *xmlx.Node) {
	if (!Force) && (xn.Name.Local == "COLLADA") {
		if _, ver := ugo.ParseVersion(attVal(xn, "version")); ver >= 1.5 {
			skipped = true
			return
		}
	}
	xn.Name.Space = ""
	for _, att := range xn.Attributes {
		att.Name.Space = ""
	}
	switch xn.Name.Local {
	case "COLLADA":
		setAttr(xn, "version", "1.5", false)
		setAttr(xn, "xmlns", "http://www.collada.org/2008/03/COLLADASchema", false)
	case "array":
		if !ustr.IsOneOf(xn.Parent.Name.Local, "array", "newparam", "setparam") {
			delNode(xn)
		}
	case "argument", "texenv":
		delAttr(xn, "unit")
	case "cg_value_type", "connect_param", "generator", "tapered_capsule", "tapered_cylinder", "texture_unit":
		delNode(xn)
	case "code", "include":
		if !ustr.IsOneOf(xn.Parent.Name.Local, "profile_CG", "profile_GLES2", "profile_GLSL") {
			delNode(xn)
		}
	case "color_target", "depth_target", "stencil_target":
		if val := surfaceImages[xn.Value]; len(val) == 0 {
			setAttr(ensureChild(xn, "param"), "ref", xn.Value, false)
		} else {
			setAttr(ensureChild(xn, "instance_image"), "url", "#"+val, false)
		}
		xn.Value = ""
	case "float_array":
		restrictAttr(xn, "digits", 1, 17)
		restrictAttr(xn, "magnitude", -324, 308)
	case "image":
		convertImage(xn)
	case "instance_effect":
		if xn.Parent.Name.Local == "render" {
			id := fmt.Sprintf("render_%v", time.Now().UnixNano())
			matNode := xmlx.NewNode(xn.Type)
			matNode.Name.Local = "material"
			setAttr(matNode, "id", id, false)
			matsLibNode := ensureChild(srcDoc.Root.Children[0], "library_materials")
			matsLibNode.AddChild(matNode)
			oldParent := xn.Parent
			_, pos := moveNode(xn, matNode, "")
			instNode := xmlx.NewNode(xn.Type)
			instNode.Name.Local = "instance_material"
			setAttr(instNode, "url", "#"+id, false)
			instNode.Parent = oldParent
			oldParent.Children[pos] = instNode
		}
	case "magfilter", "minfilter", "mipfilter":
		if (xn.Value == "NONE") && (xn.Name.Local != "mipfilter") {
			xn.Value = "NEAREST"
		} else {
			switch xn.Value {
			case "NEAREST_MIPMAP_NEAREST":
				ensureSiblings(xn, map[string]string{"minfilter": "NEAREST", "mipfilter": "NEAREST"})
			case "LINEAR_MIPMAP_NEAREST":
				ensureSiblings(xn, map[string]string{"minfilter": "LINEAR", "mipfilter": "NEAREST"})
			case "NEAREST_MIPMAP_LINEAR":
				ensureSiblings(xn, map[string]string{"minfilter": "NEAREST", "mipfilter": "LINEAR"})
			case "LINEAR_MIPMAP_LINEAR":
				ensureSiblings(xn, map[string]string{"minfilter": "LINEAR", "mipfilter": "LINEAR"})
			}
		}
	case "mipmap_bias":
		renameNode(xn, "mip_bias")
	case "mipmap_maxlevel":
		renameNode(xn, "mip_max_level")
	case "newparam":
		if !ustr.IsOneOf(xn.Parent.Name.Local, "effect", "profile_CG", "profile_COMMON", "profile_GLSL", "profile_GLES", "profile_GLES2") {
			delNode(xn)
		}
	case "radius":
		if vals := ustr.Split(xn.Value, " "); (xn.Parent.Name.Local == "capsule") && (len(vals) > 0) && (len(vals) < 3) {
			for len(vals) < 3 {
				vals = append(vals, "1.0")
			}
			xn.Value = strings.Join(vals, " ")
		}
	case "setparam":
		if !ustr.IsOneOf(xn.Parent.Name.Local, "instance_effect", "usertype") {
			delNode(xn)
		}
	case "shader":
		convertShader(xn)
	case "surface":
		convertSurface(xn)
	case "texture_pipeline":
		if xn.Parent.Name.Local != "states" {
			delNode(xn)
		}
	case "transparent":
		setAttr(xn, "opaque", "A_ONE", true)
	case "usertype":
//.........这里部分代码省略.........
开发者ID:nizvoo,项目名称:go-collada,代码行数:101,代码来源:convert.go


示例18: convertImage

func convertImage(xn *xmlx.Node) {
	hexFormat := attVal(xn, "format")
	imgHeight := attValU64(xn, "height")
	imgWidth := attValU64(xn, "width")
	imgDepth := attValU64(xn, "depth")
	if imgDepth == 0 {
		imgDepth = 1
	}
	delAtts(xn, "height", "width", "depth", "format")
	if len(hexFormat) == 0 {
		hexFormat = HexFormat
	}
	hexData, refUrl, initNode, hexNode := "", "", subNode(xn, "init_from"), subNode(xn, "data")
	if initNode != nil {
		refUrl = initNode.Value
		delNodeForce(initNode, true)
		initNode = nil
	}
	if hexNode != nil {
		hexData = hexNode.Value
		delNodeForce(hexNode, true)
		hexNode = nil
	}
	if (len(refUrl) > 0) || (len(hexData) > 0) {
		initNode = xmlx.NewNode(xn.Type)
		initNode.Name.Local = "init_from"
		if len(refUrl) > 0 {
			ensureChild(initNode, "ref").Value = refUrl
		}
		if len(hexData) > 0 {
			hex := ensureChild(initNode, "hex")
			setAttr(hex, "format", hexFormat, false)
			hex.Value = hexData
			hexData = ""
		}
	}
	if (imgWidth != 0) && (imgHeight != 0) {
		cn := xmlx.NewNode(xn.Type)
		switch imgDepth {
		case 1:
			cn.Name.Local = "create_2d"
		case 2:
			cn.Name.Local = "create_3d"
		default:
			cn.Name.Local = "create_cube"
		}
		sn := ensureChild(cn, "size_exact")
		setAttr(sn, "width", fmt.Sprintf("%v", imgWidth), false)
		setAttr(sn, "height", fmt.Sprintf("%v", imgHeight), false)
		if initNode != nil {
			cn.AddChild(initNode)
		}
		xn.AddChild(cn)
	} else if initNode != nil {
		xn.AddChild(initNode)
	}
	if oldParent := xn.Parent; oldParent.Name.Local != "library_images" {
		logFmt("!!MOVE image!!; this may be BUGGY, please report your use-case at GitHub Issues for this package!!\n")
		id := attVal(xn, "id")
		if len(id) == 0 {
			id = fmt.Sprintf("img_moved_%v", time.Now().UnixNano())
		}
		if _, pos := moveNode(xn, nil, "library_images"); pos >= 0 {
			xn = xmlx.NewNode(xn.Type)
			xn.Name.Local = "instance_image"
			setAttr(xn, "url", "#"+id, false)
			xn.Parent = oldParent
			oldParent.Children[pos] = xn
		}
	}
}
开发者ID:nizvoo,项目名称:go-collada,代码行数:71,代码来源:convert.go


示例19: convertSurface

func convertSurface(xn *xmlx.Node) {
	var (
		imgNode, imgCreateNode, imgCreateFormatNode, rn, sn, tn *xmlx.Node
		ensureCreateNode                                        = func() *xmlx.Node {
			if imgCreateNode == nil {
				if rn = subNode(imgNode, "init_from"); rn != nil {
					imgNode.RemoveChild(rn)
				}
				imgCreateNode = ensureChild(imgNode, "create_"+strings.ToLower(attVal(xn, "type")))
				if rn != nil {
					imgCreateNode.AddChild(rn)
				}
			}
			return imgCreateNode
		}
		ensureCreateFormatNode = func(exact, hint bool) *xmlx.Node {
			imgCreateFormatNode = ensureChild(ensureCreateNode(), "format")
			if hint {
				ensureChild(imgCreateFormatNode, "hint")
			}
			if exact {
				ensureChild(imgCreateFormatNode, "exact")
			}
			return imgCreateFormatNode
		}
	)
	surfaceNodes = append(surfaceNodes, xn)
	myID, imgID, initNode := attVal(xn.Parent, "sid"), "", subNode(xn, "init_as_target")
	if len(myID) == 0 {
		myID = attVal(xn.Parent, "ref")
	}
	if myID = ustr.StripPrefix(myID, "#"); len(myID) > 0 {
		if initNode != nil {
			imgID = fmt.Sprintf("img_target_%v", time.Now().UnixNano())
			imgNode, rn = xmlx.NewNode(xn.Type), xmlx.NewNode(xn.Type)
			imgNode.Name.Local, rn.Name.Local = "image", "renderable"
			setAttr(imgNode, "id", imgID, false)
			setAttr(rn, "share", "true", false)
			imgNode.AddChild(rn)
			moveNode(imgNode, nil, "library_images")
		} else if initNode = subNode(xn, "init_from"); initNode != nil {
			imgID = initNode.Value
		} else {
			for _, sn = range xn.Children {
				if strings.HasPrefix(sn.Name.Local, "init_") {
					initNode = sn
					break
				}
			}
			if initNode != nil {
				for _, sn = range initNode.Children {
					if imgID = attVal(sn, "ref"); len(imgID) > 0 {
						break
					}
				}
			}
		}
		if imgID = ustr.StripPrefix(imgID, "#"); len(imgID) > 0 {
			surfaceImages[myID] = imgID
			if imgNode == nil {
				for _, sn = range subNode(srcDoc.Root.Children[0], "library_images").Children {
					if attVal(sn, "id") == imgID {
						imgNode = sn
						break
					}
				}
			}
		}
		if imgNode != nil {
			if tn = subNode(xn, "format"); tn != nil {
				subNode(ensureCreateFormatNode(true, false), "exact").Value = tn.Value
			}
			if tn = subNode(xn, "format_hint"); tn != nil {
				rn = subNode(ensureCreateFormatNode(false, true), "hint")
				if sn = subNode(tn, "channels"); sn != nil {
					setAttr(rn, "channels", sn.Value, false)
				}
				if sn = subNode(tn, "range"); sn != nil {
					setAttr(rn, "range", sn.Value, false)
				}
				if sn = subNode(tn, "precision"); sn != nil {
					setAttr(rn, "precision", sn.Value, false)
				}
				if sn = subNode(tn, "option"); sn != nil {
					setAttr(rn, "space", sn.Value, false)
				}
			}
			if tn = subNode(xn, "size"); tn != nil {
				vals := ustr.Split(tn.Value, " ")
				rn = ensureChild(ensureCreateNode(), "size_exact")
				if len(vals) > 0 {
					setAttr(rn, "width", vals[0], false)
				}
				if len(vals) > 1 {
					setAttr(rn, "height", vals[1], false)
				}
				if len(vals) > 2 {
					setAttr(rn, "depth", vals[2], false)
				}
			}
//.........这里部分代码省略.........
开发者ID:nizvoo,项目名称:go-collada,代码行数:101,代码来源:convert.go



注:本文中的github.com/go-forks/xmlx.Node类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Golang fsnotify.NewWatcher函数代码示例发布时间:2022-05-23
下一篇:
Golang go-pkg-xmlx.Node类代码示例发布时间:2022-05-23
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap