type OpenXmlSimpleType = class(OpenXmlElement) public function Init();override; function InitNode(_node: XmlNode);override; function Copy(_obj: tslobj);override; function Clone(): OpenXmlSimpleType;override; function Deserialize();override; function Serialize();override; function Marshal(): tableArray;override; public // attributes property XmlAttrVal; property Val read ReadXmlAttrVal write WriteXmlAttrVal; function ReadXmlAttrVal(); function WriteXmlAttrVal(_value: any); // 动态获取IsApplied // IsApplied: boolean; // 是否已经应用,和val值有关 property IsApplied read ReadIsApplied; function ReadIsApplied(); end; function OpenXmlSimpleType.Init();override; begin // {self.}Enable := false; end; function OpenXmlSimpleType.InitNode(_node: XmlNode);override; begin {self.}XmlNode := ifObj(_node) ? _node : nil; deserialized_ := false; end; function OpenXmlSimpleType.Copy(_obj: tslobj);override; begin {self.}Enable := _obj.Enable; if not ifnil(_obj.XmlAttrVal.Value) then {self.}Val := _obj.XmlAttrVal.Value; end; function OpenXmlSimpleType.Clone(): OpenXmlSimpleType;override; begin obj := new OpenXmlSimpleType(nil, {self.}Prefix, {self.}LocalName); obj.Enable := {self.}Enable; if not ifnil({self.}XmlAttrVal.Value) then obj.Val := {self.}XmlAttrVal.Value; return obj; end; function OpenXmlSimpleType.Marshal(): tableArray;override; begin if not {self.}Enable then return array(); attr := array(); if not inil({self.}XmlAttrVal.Value) then attr[{self.}XmlAttrVal.ElementName] := {self.}XmlAttrVal.Value; arr := array("type": "element", "name": name_, "attributes": attr, "children": array()); return arr; end; function OpenXmlSimpleType.Deserialize();override; begin if deserialized_ then return; if ifObj({self.}XmlNode) then begin attrs := {self.}XmlNode.Attributes(); if length(attrs) > 1 then begin echo "OpenXmlSimpleType.Deserialize error.\n"; return; end {self.}Val := nil; for k,v in attrs do {self.}Val := v; {self.}Enable := true; end else begin {self.}Enable := false; {self.}XmlAttrVal := nil; end deserialized_ := true; end; function OpenXmlSimpleType.Serialize();override; begin if not ifObj({self.}XmlNode) then begin if {self.}Enable then {self.}GetNode(); if not ifnil({self.}XmlAttrVal.Value) then {self.}XmlNode.SetAttribute({self.}XmlAttrVal.ElementName, {self.}XmlAttrVal.Value); end else begin if not {self.}Enable or {self.}Removed then {self.}Parent.XmlNode.DeleteChild({self.}XmlNode); else if not ifnil({self.}XmlAttrVal.Value) then {self.}XmlNode.SetAttribute({self.}XmlAttrVal.ElementName, {self.}XmlAttrVal.Value); else if ifnil({self.}XmlAttrVal.Value) then {self.}XmlNode.DeleteAttribute({self.}XmlAttrVal.ElementName); end end; function OpenXmlSimpleType.ReadXmlAttrVal(); begin return {self.}XmlAttrVal.Value; end; function OpenXmlSimpleType.WriteXmlAttrVal(_value: any); begin if ifnil({self.}XmlAttrVal) then {self.}XmlAttrVal := new OpenXmlAttribute({self.}Prefix, "val", nil); {self.}XmlAttrVal.Value := _value; {self.}Enable := true; end; function OpenXmlSimpleType.ReadIsApplied(); begin if {self.}Enable then return {self.}XmlAttrVal.Value = "0" or {self.}XmlAttrVal.Value = "false" or {self.}XmlAttrVal.Value = "off" ? false : true; return false; end;