type OpenXmlTextElement = class(OpenXmlElement) public function InitNode(_node: XmlNode);override; function Copy(_obj: tslobj);virtual; function Deserialize();override; function Serialize();override; function Marshal(): tableArray;override; public Text: string; // 元素的文本内容 end; function OpenXmlTextElement.InitNode(_node: XmlNode);override; begin {self.}XmlNode := ifObj(_node) ? _node : nil; end; function OpenXmlTextElement.Copy(_obj: tslobj);virtual; begin if not ifnil(_obj.Text) then {self.}Text := _obj.Text; end; function OpenXmlTextElement.Marshal(): tableArray;override; begin arr := array("type": "element", "name": name_, "attributes": array(), "children": array()); for k,v in attributes_ do if not ifnil(v.Value) then arr["attributes"][v.ElementName] := v.Value; if not ifnil({self.}Text) then arr["children"] := array(("type": "pcdata", "value": {self.}Text)); return arr; end; function OpenXmlTextElement.Deserialize();override; begin if not ifObj({self.}XmlNode) then return; {self.}Text := {self.}XmlNode.GetText(); attrs := {self.}XmlNode.Attributes(); for k, v in attrs do begin pos := pos("xmlns", k); if pos then begin xmlns_[k] := k = "xmlns" ? new OpenXmlAttribute("", "xmlns", v) : new OpenXmlattribute("xmlns", k[pos+6:], v); continue; end pf := attributes_pf_[k]; if ifnil(pf) then continue; pf.Do(v); end end; function OpenXmlTextElement.Serialize();override; begin if {self.}DeleteSelf() then return; if not ifnil({self.}Text) then {self.}GetNode().SetValue({self.}Text); for k,v in attributes_ do if not ifnil(v.Value) then {self.}GetNode().SetAttribute(v.ElementName, v.Value); end;