//解析Table元素 func parseTableElement(table dom.Element, p *PageSetting) *PrintTable { var ( tmp string err error fval float64 ) z := NewPrintTable() parsePosCommonAttribute(table, z) if z.GetWidth() == 0 { z.SetWidth(p.Width) } z.SetName("Table") tmp, err = getAttr(table.Attr(), "LineSeperate") if err == nil { fval, err = strconv.ParseFloat(tmp, 32) if err != nil { utils.Error("can't format LineSeperate attribute %s,expected float32 value", tmp) } z.LineSeperate = float32(fval) } parsePrintContent(table, z, p) return z }
//保存所有设备配置 func (p *ConfigProtocol) SaveAllDevConfig(r *http.Request, arg *JsonConfigInputAgr, res *JsonResponse) error { utils.Debug("received ConfigProtocol SaveAllDevConfig request") var ( n dom.Node t dom.Element dt dom.Attribute ) db := dom.NewDOMBuilder(strings.NewReader(arg.Content), dom.NewDOMStore()) d, err2 := db.Build() if err2 != nil { res.Code = 1 res.ErrMsg = fmt.Sprintf("parse xml file error,category :[%+v] ", err2.Error()) utils.Error("parse xml file error,category:[%+v]", err2.Error()) return nil } f := d.ChildNodes() for i := 0; i < len(f); i++ { n = f[i] switch n.Kind() { case dom.ElementKind: t = n.(dom.Element) switch t.Name() { case "Device": // 解析设置 var v []dom.Attribute v = t.Attr() for j := 0; j < len(v); j++ { dt = v[j] if strings.EqualFold(dt.Name(), "Category") { err := SaveDrvConfig(dt.Value(), t.String()) if err != nil { res.Code = 1 res.ErrMsg = fmt.Sprintf("save file error,category :%s content is : [%s]", dt.Value(), t.String()) utils.Error("can't save category [%s] ,content is : [%s]", dt.Value(), t.String()) return nil } } } break default: utils.Error("can't recognize element name: %s", t.Name()) } break } } res.Code = 0 utils.Debug("end ConfigProtocol SaveAllDevConfig request") return nil }
//解析通用的属性 func parsePosCommonAttribute(cur dom.Element, ps PrintPosInterface) { var tmp string var fval float64 var err error tmp, err = getAttr(cur.Attr(), "Width") if err == nil { fval, err = strconv.ParseFloat(tmp, 32) if err != nil { utils.Error("can't format Height attribute %s,expected int value", tmp) } ps.SetWidth(float32(fval)) } tmp, err = getAttr(cur.Attr(), "Height") if err == nil { fval, err = strconv.ParseFloat(tmp, 32) if err != nil { utils.Error("can't format Height attribute %s,expected int value", tmp) } ps.SetHeight(float32(fval)) } tmp, err = getAttr(cur.Attr(), "Pos") ps.SetPos(tmp) tmp, err = getAttr(cur.Attr(), "Align") ps.SetAlign(tmp) tmp, err = getAttr(cur.Attr(), "Left") ps.SetLeft(tmp) tmp, err = getAttr(cur.Attr(), "Top") ps.SetTop(tmp) }