self.修改为{self,},提高执行效率

This commit is contained in:
csh
2024-07-10 16:42:53 +08:00
parent 08d5c1c6f7
commit 3dab5b5fb5
372 changed files with 6349 additions and 6349 deletions
+6 -6
View File
@@ -5,21 +5,21 @@ public
public
LocalName: string;
Prefix: tslobj;
Prefix: string;
ElementName: string;
Value: any;
end;
function OpenXmlAttribute.Create(_prefix: string; _local_name: string);overload;
begin
self.Create(_prefix, _local_name, nil);
{self.}Create(_prefix, _local_name, nil);
end;
function OpenXmlAttribute.Create(_prefix: string; _local_name: string; _value: any);overload;
begin
self.Prefix := _prefix;
self.LocalName := _local_name;
self.Value := _value;
self.ElementName := ifString(self.Prefix) and self.Prefix <> "" ? format("%s:%s", self.Prefix, self.LocalName) : self.LocalName;
{self.}Prefix := _prefix;
{self.}LocalName := _local_name;
{self.}Value := _value;
{self.}ElementName := ifString({self.}Prefix) and {self.}Prefix <> "" ? format("%s:%s", {self.}Prefix, {self.}LocalName) : {self.}LocalName;
end;
+37 -37
View File
@@ -36,7 +36,7 @@ public
ElementName: string;
protected
attributes_: tableArray; // 属性
attributes_: array of OpenXmlAttribute; // 属性
child_elements_: array of tslobj; // 子节点元素
sorted_child_: tableArray;
end;
@@ -45,26 +45,26 @@ function OpenXmlElement.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);
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 OpenXmlElement.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();
self.InitAttributes();
self.InitChildren();
{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();
{self.}InitAttributes();
{self.}InitChildren();
end;
function OpenXmlElement.GetOrCreateNode(_obj: tslobj);
begin
if not ifObj(self.XmlNode) then self.XmlNode := Self.Parent.GetOrCreateNode(self);
if not ifObj({self.}XmlNode) then {self.}XmlNode := {self.}Parent.GetOrCreateNode(self);
nearest_node := nil;
for k, v in child_elements_ do
begin
@@ -72,8 +72,8 @@ begin
if v = _obj then
begin
if ifObj(v.XmlNode) then return v.XmlNode;
if ifnil(nearest_node) then return self.XmlNode.InsertFirstChild("element", _obj.ElementName);
else return self.XmlNode.InsertAfterChild(nearest_node, "element", _obj.ElementName);
if ifnil(nearest_node) then return {self.}XmlNode.InsertFirstChild("element", _obj.ElementName);
else return {self.}XmlNode.InsertAfterChild(nearest_node, "element", _obj.ElementName);
end
end
raise "No child.";
@@ -81,16 +81,16 @@ end;
function OpenXmlElement.GetNode(): XmlNode;
begin
if not ifObj(self.XmlNode) then self.XmlNode := self.Parent.GetOrCreateNode(self);
return self.XmlNode;
if not ifObj({self.}XmlNode) then {self.}XmlNode := {self.}Parent.GetOrCreateNode(self);
return {self.}XmlNode;
end;
function OpenXmlElement.Deserialize();
begin
if not ifObj(self.XmlNode) then return nil;
if not ifObj({self.}XmlNode) then return nil;
for k, v in attributes_ do
begin
attr := self.XmlNode.GetAttribute(v.ElementName);
attr := {self.}XmlNode.GetAttribute(v.ElementName);
v.Value := attr = "" ? nil : attr;
end
for k, v in child_elements_ do
@@ -101,7 +101,7 @@ function OpenXmlElement.Serialize();
begin
// Attributes
for k, v in attributes_ do
if not ifnil(v.Value) then self.GetNode().SetAttribute(v.ElementName, v.Value);
if not ifnil(v.Value) then {self.}GetNode().SetAttribute(v.ElementName, v.Value);
// Children
for k, v in child_elements_ do
if ifObj(v) then v.Serialize();
@@ -132,7 +132,7 @@ begin
end
end
tmp_arr := array("type": "element", "name": self.ElementName, "children": child_arr, "attributes": array());
tmp_arr := array("type": "element", "name": {self.}ElementName, "children": child_arr, "attributes": array());
for k,v in attributes_ do
begin
if not ifnil(v.Value) then tmp_arr["attributes"][v.ElementName] := v.Value;
@@ -142,7 +142,7 @@ end;
function OpenXmlElement.Append(_obj: tslobj): boolean; // OpenXmlElement or OpenXmlPcdata
begin
if not self.IsValidChild(_obj) then return false;
if not {self.}IsValidChild(_obj) then return false;
_obj.Parent := self;
child_elements_[length(child_elements_)] := _obj;
// _obj := nil;
@@ -151,26 +151,26 @@ end;
function OpenXmlElement.InsertAfter(_pos_obj: tslobj; _obj: tslobj): boolean;
begin
if not self.IsValidChild(_pos_obj) or not self.IsValidChild(_obj) then return false;
find_pos := self.FindChild(_pos_obj);
if not {self.}IsValidChild(_pos_obj) or not {self.}IsValidChild(_obj) then return false;
find_pos := {self.}FindChild(_pos_obj);
if find_pos = -1 then return false;
self.InsertChild(_obj, find_pos);
{self.}InsertChild(_obj, find_pos);
return true;
end;
function OpenXmlElement.InsertBefore(_pos_obj: tslobj; _obj: tslobj): boolean;
begin
if not self.IsValidChild(_pos_obj) or not self.IsValidChild(_obj) then return false;
find_pos := self.FindChild(_pos_obj);
if not {self.}IsValidChild(_pos_obj) or not {self.}IsValidChild(_obj) then return false;
find_pos := {self.}FindChild(_pos_obj);
if find_pos = -1 then return false;
self.InsertChild(_obj, find_pos-1);
{self.}InsertChild(_obj, find_pos-1);
return true;
end;
function OpenXmlElement.Prepend(_obj: tslobj): boolean;
begin
if not self.IsValidChild(_pos_obj) or not self.IsValidChild(_obj) then return false;
self.InsertChild(_obj, 0);
if not {self.}IsValidChild(_pos_obj) or not {self.}IsValidChild(_obj) then return false;
{self.}InsertChild(_obj, 0);
return true;
end;
@@ -178,20 +178,20 @@ function OpenXmlElement.Remove(_obj: tslobj): boolean;
begin
if ifnil(_obj)then // 删除所有
begin
if not ifObj(self.XmlNode) or not ifObj(self.Parent) or not ifObj(self.PartName.XmlNode) then return false;
self.Parent.XmlNode.DeleteChild(self.XmlNode);
if not ifObj({self.}XmlNode) or not ifObj({self.}Parent) or not ifObj({self.}PartName.XmlNode) then return false;
{self.}Parent.XmlNode.DeleteChild({self.}XmlNode);
return true;
end
else if self.IsValidChild(_obj) then
else if {self.}IsValidChild(_obj) then
begin
if not ifObj(_obj.XmlNode) or not ifObj(self.XmlNode) then return false;
self.XmlNode.DeleteChild(_obj.XmlNode);
if not ifObj(_obj.XmlNode) or not ifObj({self.}XmlNode) then return false;
{self.}XmlNode.DeleteChild(_obj.XmlNode);
return true;
end
else if _obj is Class(OpenXmlAttribute) then
begin
if not ifObj(self.XmlNode) then return false;
self.XmlNode.DeleteAttribute(_obj.ElementName);
if not ifObj({self.}XmlNode) then return false;
{self.}XmlNode.DeleteAttribute(_obj.ElementName);
return false;
end
end;
+27 -27
View File
@@ -30,78 +30,78 @@ 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);
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();
{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);
{self.}XmlAttrVal := new OpenXmlAttribute({self.}Prefix, "val", nil);
end
function OpenXmlEmpty.InitNode(_node: XmlNode);
begin
self.XmlNode := ifObj(_node) ? _node : nil;
{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;
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();
if not {self.}Value then return array();
attr := array();
if not inil(self.XmlAttrVal.Value) then attr[self.XmlAttrVal.ElementName] := self.XmlAttrVal.Value;
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
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;
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.}Value := nil;
end
end;
function OpenXmlEmpty.GetNode(): XmlNode;
begin
if not ifObj(self.XmlNode) then self.XmlNode := self.Parent.GetOrCreateNode(self);
return self.XmlNode;
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();
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;
return {self.}XmlAttrVal.Value;
end;
function OpenXmlEmpty.WriteXmlAttrVal(_value: any);
begin
self.XmlAttrVal.Value := _value;
{self.}XmlAttrVal.Value := _value;
end;
+21 -21
View File
@@ -18,10 +18,10 @@ public
Prefix: string; // 前缀
XmlNode: XmlNode; // XMLNode节点
ElementName: string;
Text: string; // 元素的文本内容,有的话就是pcdata,没有就是普通的节点
Text: string; // 元素的文本内容
protected
attributes_: tableArray; // 不提供访问
attributes_: array of OpenXmlAttribute; // 属性
end;
@@ -29,26 +29,26 @@ function OpenXmlPcdata.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);
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 OpenXmlPcdata.Create(_parent: tslobj; _prefix: string; _local_name: string);overload;
begin
self.Parent := _parent;
self.Prefix := _prefix;
self.LocalName := _local_name;
self.XmlNode := nil;
self.Text := nil;
self.ElementName := ifString(self.Prefix) and self.Prefix <> "" ? format("%s:%s", self.Prefix, self.LocalName) : self.LocalName;
self.Init();
self.InitAttributes();
{self.}Parent := _parent;
{self.}Prefix := _prefix;
{self.}LocalName := _local_name;
{self.}XmlNode := nil;
{self.}Text := nil;
{self.}ElementName := ifString({self.}Prefix) and {self.}Prefix <> "" ? format("%s:%s", {self.}Prefix, {self.}LocalName) : {self.}LocalName;
{self.}Init();
{self.}InitAttributes();
end;
function OpenXmlPcdata.InitNode(_node: XmlNode);virtual;
begin
self.XmlNode := ifObj(_node) ? _node : nil;
{self.}XmlNode := ifObj(_node) ? _node : nil;
end;
function OpenXmlPcdata.Marshal(): tableArray;
@@ -56,27 +56,27 @@ 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));
if not ifnil({self.}Text) then arr["children"] := array(("type": "pcdata", "value": {self.}Text));
return arr;
end;
function OpenXmlPcdata.Deserialize();
begin
self.Text := ifObj(self.XmlNode) ? self.XmlNode.GetText() : nil;
{self.}Text := ifObj({self.}XmlNode) ? {self.}XmlNode.GetText() : nil;
for k,v in attributes_ do
v.Value := ifObj(self.XmlNode) ? self.XmlNode.GetAttribute(v.ElementName) : nil;
v.Value := ifObj({self.}XmlNode) ? {self.}XmlNode.GetAttribute(v.ElementName) : nil;
end;
function OpenXmlPcdata.GetNode(): XmlNode;
begin
if not ifObj(self.XmlNode) then self.XmlNode := self.Parent.GetOrCreateNode(self);
return self.XmlNode;
if not ifObj({self.}XmlNode) then {self.}XmlNode := {self.}Parent.GetOrCreateNode(self);
return {self.}XmlNode;
end;
function OpenXmlPcdata.Serialize();
begin
if not ifnil(self.Text) then self.GetNode().SetValue(self.Text);
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);
if not ifnil(v.Value) then {self.}GetNode().SetAttribute(v.ElementName, v.Value);
end;