❗重大更新:设计方式由namspace转变成unit
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user