60 lines
1.8 KiB
Plaintext
60 lines
1.8 KiB
Plaintext
type OpenXmlTextElement = class(OpenXmlElement)
|
|
public
|
|
function InitNode(_node: XmlNode);override;
|
|
function Copy(_obj: tslobj);virtual;
|
|
function Deserialize();override;
|
|
function Serialize();override;
|
|
function Marshal(): tableArray;override;
|
|
|
|
public
|
|
Text: string; // 元素的文本内容
|
|
end;
|
|
|
|
function OpenXmlTextElement.InitNode(_node: XmlNode);override;
|
|
begin
|
|
{self.}XmlNode := ifObj(_node) ? _node : nil;
|
|
end;
|
|
|
|
function OpenXmlTextElement.Copy(_obj: tslobj);virtual;
|
|
begin
|
|
if not ifnil(_obj.Text) then {self.}Text := _obj.Text;
|
|
end;
|
|
|
|
function OpenXmlTextElement.Marshal(): tableArray;override;
|
|
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));
|
|
return arr;
|
|
end;
|
|
|
|
function OpenXmlTextElement.Deserialize();override;
|
|
begin
|
|
if not ifObj({self.}XmlNode) then return;
|
|
{self.}Text := {self.}XmlNode.GetText();
|
|
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);
|
|
end
|
|
end;
|
|
|
|
function OpenXmlTextElement.Serialize();override;
|
|
begin
|
|
if {self.}DeleteSelf() then return;
|
|
|
|
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);
|
|
end;
|
|
|