重大更新:设计方式由namspace转变成unit

This commit is contained in:
csh
2025-01-02 11:39:09 +08:00
parent 48e4de7b87
commit c77abfc1c8
474 changed files with 88900 additions and 43433 deletions
+5
View File
@@ -3,11 +3,16 @@ public
function Create(_prefix: string; _local_name: string);overload;
function Create(_prefix: string; _local_name: string; _value: any);overload;
property NamespaceUri read Value write Value;
public
LocalName: string;
Prefix: string;
ElementName: string;
Value: any;
protected
namespace_uri_: string;
end;
function OpenXmlAttribute.Create(_prefix: string; _local_name: string);overload;
+24 -1
View File
@@ -13,8 +13,8 @@ public
function GetNode(): XmlNode;
function Elements(): array of tslobj;
function Attributes(): array of OpenXmlAttribute;
function Xmlns(_prefix: string): string;
// 增删改查接口 -- 暂不实现
public
function AppendChild(_obj: tslobj); // OpenXmlElement or OpenXmlPcdata
function InsertAfter(_obj: tslobj; _pos_obj: tslobj);
@@ -36,6 +36,7 @@ protected
// child_elements_: array of tslobj; // 子节点元素
sorted_child_: tableArray;
container_: TSOfficeContainer;
xmlns_: tableArray;
end;
function OpenXmlElement.Create(_node: XmlNode);overload;
@@ -45,6 +46,7 @@ begin
if pos then {self.}Create(nil, node_name[:pos-1], node_name[pos+1:]);
else {self.}Create(nil, nil, node_name);
{self.}InitNode(_node);
xmlns_ := array();
end;
function OpenXmlElement.Create(_parent: tslobj; _prefix: string; _local_name: string);overload;
@@ -55,6 +57,7 @@ begin
{self.}XmlNode := nil;
{self.}ElementName := ifString({self.}Prefix) and {self.}Prefix <> "" ? format("%s:%s", {self.}Prefix, {self.}LocalName) : {self.}LocalName;
{self.}Init();
xmlns_ := array();
end;
function OpenXmlElement.InitNode(_node: XmlNode);virtual;
@@ -109,6 +112,12 @@ begin
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);
@@ -120,6 +129,9 @@ end;
function OpenXmlElement.Serialize();
begin
// xmlns
for k, v in xmlns_ do
{self.}GetNode().SetAttribute(v.ElementName, v.Value);
// Attributes
for k, v in attributes_ do
if not ifnil(v.Value) then {self.}GetNode().SetAttribute(v.ElementName, v.Value);
@@ -162,6 +174,17 @@ begin
return tmp_arr;
end;
function OpenXmlElement.Xmlns(_prefix: string): string;
begin
k := ifnil(_prefix) ? "xmlns" : "xmlns:" + _prefix;
if tslassigning then
begin
if ifnil(xmlns_[k]) then
xmlns_[k] := ifnil(_prefix) ? new OpenXmlAttribute("", "xmlns", nil) : new OpenXmlAttribute("xmlns", _prefix, nil);
end
return xmlns_[k];
end;
function OpenXmlElement.Elements(): array of tslobj;
begin
return container_.Get();