self.修改为{self,},提高执行效率
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user