109 lines
3.2 KiB
Plaintext
109 lines
3.2 KiB
Plaintext
type OpenXmlEmpty = class
|
|
public
|
|
function Create(_node: XmlNode);overload;
|
|
function Create(_parent: tslobj; _prefix: string; _local_name: string);overload;
|
|
function Init();
|
|
function InitNode(_node: XmlNode);
|
|
|
|
function Copy(_obj: tslobj);virtual;
|
|
function GetNode(): XmlNode;
|
|
function Marshal(): tableArray;
|
|
function Deserialize();
|
|
function Serialize();
|
|
|
|
public
|
|
LocalName: string; // 本地名称
|
|
[weakref]Parent: tslobj; // 父类
|
|
Prefix: string; // 前缀
|
|
XmlNode: XmlNode; // XMLNode节点
|
|
ElementName: string;
|
|
Value: any;
|
|
|
|
public
|
|
XmlAttrVal;
|
|
property Val read ReadXmlAttrVal write WriteXmlAttrVal;
|
|
function ReadXmlAttrVal();
|
|
function WriteXmlAttrVal(_value: any);
|
|
end;
|
|
|
|
function OpenXmlEmpty.Create(_node: XmlNode);overload;
|
|
begin
|
|
node_name := _node.GetName();
|
|
pos := Pos(":", node_name);
|
|
if pos then {self.}Create(nil, node_name[:pos-1], node_name[pos+1:]);
|
|
else {self.}Create(nil, nil, node_name);
|
|
{self.}InitNode(_node);
|
|
end;
|
|
|
|
function OpenXmlEmpty.Create(_parent: tslobj; _prefix: string; _local_name: string);overload;
|
|
begin
|
|
{self.}Parent := _parent;
|
|
{self.}Prefix := _prefix;
|
|
{self.}LocalName := _local_name;
|
|
{self.}XmlNode := nil;
|
|
{self.}ElementName := ifString({self.}Prefix) and {self.}Prefix <> "" ? format("%s:%s", {self.}Prefix, {self.}LocalName) : {self.}LocalName;
|
|
{self.}Init();
|
|
end;
|
|
|
|
function OpenXmlEmpty.Init();
|
|
begin
|
|
{self.}XmlAttrVal := new OpenXmlAttribute({self.}Prefix, "val", nil);
|
|
end
|
|
|
|
function OpenXmlEmpty.InitNode(_node: XmlNode);
|
|
begin
|
|
{self.}XmlNode := ifObj(_node) ? _node : nil;
|
|
end;
|
|
|
|
function OpenXmlEmpty.Copy(_obj: tslobj);
|
|
begin
|
|
if not ifnil(_obj.Value) then {self.}Value := _obj.Value;
|
|
if not ifnil(_obj.XmlAttrVal.Value) then {self.}XmlAttrVal.Value := _obj.XmlAttrVal.Value;
|
|
end;
|
|
|
|
function OpenXmlEmpty.Marshal(): tableArray;
|
|
begin
|
|
if not {self.}Value 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 OpenXmlEmpty.Deserialize();
|
|
begin
|
|
if ifObj({self.}XmlNode) then
|
|
begin
|
|
v := {self.}XmlNode.GetAttribute({self.}XmlAttrVal.ElementName);
|
|
{self.}Value := v = "0" ? false : true;
|
|
{self.}XmlAttrVal.Value := v = "" ? nil : v;
|
|
end
|
|
else begin
|
|
{self.}Value := nil;
|
|
{self.}XmlAttrVal.Value := nil;
|
|
end
|
|
end;
|
|
|
|
function OpenXmlEmpty.GetNode(): XmlNode;
|
|
begin
|
|
if not ifObj({self.}XmlNode) then {self.}XmlNode := {self.}Parent.GetOrCreateNode(self);
|
|
return {self.}XmlNode;
|
|
end;
|
|
|
|
function OpenXmlEmpty.Serialize();
|
|
begin
|
|
if not ifObj({self.}XmlNode) and not {self.}Value then return;
|
|
if ifObj({self.}XmlNode) and not {self.}Value and ifObj({self.}Parent) and ifObj({self.}Parent.XmlNode) then {self.}Parent.XmlNode.DeleteChild({self.}XmlNode);
|
|
if not ifObj({self.}XmlNode) and {self.}Value then {self.}GetNode();
|
|
end;
|
|
|
|
function OpenXmlEmpty.ReadXmlAttrVal();
|
|
begin
|
|
return {self.}XmlAttrVal.Value;
|
|
end;
|
|
|
|
function OpenXmlEmpty.WriteXmlAttrVal(_value: any);
|
|
begin
|
|
{self.}XmlAttrVal.Value := _value;
|
|
end;
|