FB_XmlControl Function Block
Organizes parsing and composing of XML data. Data can be treated as STRING or char array. Buffer size of file can be set via GVL_Param_TcUnit (xUnitBufferSize)
Variables
| Name | Type | Default | Description |
|---|---|---|---|
XmlBuffer |
FB_StreamBuffer | ||
TagListBuffer |
FB_StreamBuffer | ||
Tags |
T_MaxString | ||
TagListSeekBuffer |
FB_StreamBuffer | ||
TagsSeek |
STRING | ||
TagBuffer |
FB_StreamBuffer | ||
Tag |
T_MaxString | ||
TagOpen |
BOOL | ||
Select |
UDINT | ||
SearchPosition |
UDINT | ||
TAG_OPEN |
STRING(1) | '<' |
|
TAG_CLOSE |
STRING(1) | '>' |
|
END_TAG_CLOSE |
STRING(2) | '/>' |
|
SPACE |
STRING(1) | ' ' |
|
EQUALS |
STRING(1) | '=' |
|
QUOTE |
STRING(1) | '"' |
|
BACK_SLASH |
STRING(1) | '\' |
|
FORWARD_SLASH |
STRING(1) | '/' |
|
OPEN_COMMENT |
STRING(5) | '<!-- ' |
|
CLOSE_COMMENT |
STRING(4) | ' -->' |
|
TAB |
STRING(2) | '$T' |
|
CR_LF |
STRING(4) | '$R$N' |
Methods
ClearBuffer
PUBLIC
Clears the contents of the entire buffer.
Implementation
SearchPosition := 0;
TagListSeekBuffer.Length := 0;
XmlBuffer.Length := 0;
TagsSeek := '';
Tag := '';
CloseTag
PUBLIC
Closes a Tag: XML: <MyTag />'
Implementation
IF TagOpen THEN
XmlBuffer.Append := END_TAG_CLOSE;
Select := TagListBuffer.FindBack(SearchString := FORWARD_SLASH);
ClosedTag := TagListBuffer.CutOff(StartPos := Select);
TagOpen := FALSE;
ELSE
Select := TagListBuffer.FindBack(SearchString := FORWARD_SLASH);
ClosedTag := TagListBuffer.CutOff(StartPos := Select);
XmlBuffer.Append := TAG_OPEN;
XmlBuffer.Append := ClosedTag;
XmlBuffer.Append := TAG_CLOSE;
END_IF
CloseTag := ClosedTag;
NewComment
PUBLIC
Adds a comment XML: <!-- MyComment --> XML.NewComment(Comment: = 'MyComment');
Parameters
| Name | Type | Description |
|---|---|---|
Comment |
T_MaxString |
Implementation
IF TagOpen THEN
XmlBuffer.Append := TAG_CLOSE;
TagOpen := FALSE;
END_IF;
XmlBuffer.Append := OPEN_COMMENT;
XmlBuffer.Append := Comment;
XmlBuffer.Append := CLOSE_COMMENT;
NewParameter
PUBLIC
Must be called after opening a new tag XML.NewParameter(Name: = 'ParaName', Value: = 'Value');
Parameters
| Name | Type | Description |
|---|---|---|
Name |
T_MaxString | |
Value |
T_MaxString |
Implementation
XmlBuffer.Append := SPACE;
XmlBuffer.Append := Name;
XmlBuffer.Append := EQUALS;
XmlBuffer.Append := QUOTE;
XmlBuffer.Append := Value;
XmlBuffer.Append := QUOTE;
NewTag
PUBLIC
Creates a new Tag: XML: <MyTag> XML.NewTag(Name: = 'MyTag');
Parameters
| Name | Type | Description |
|---|---|---|
Name |
T_MaxString |
Implementation
IF TagOpen THEN
XmlBuffer.Append := TAG_CLOSE;
END_IF;
XmlBuffer.Append := TAG_OPEN;
XmlBuffer.Append := Name;
TagOpen := TRUE;
TagListBuffer.Append := FORWARD_SLASH;
TagListBuffer.Append := Name;
NewTagData
PUBLIC
Parameters
| Name | Type | Description |
|---|---|---|
Data |
T_MaxString |
Implementation
XmlBuffer.Append := TAG_CLOSE;
XmlBuffer.Append := Data;
TagOpen := FALSE;
SetBuffer
PUBLIC
Parameters
| Name | Type | Description |
|---|---|---|
PointerToBuffer |
POINTER TO BYTE | ADR(..) |
SizeOfBuffer |
UDINT | SIZEOF(..) |
Implementation
XmlBuffer.SetBuffer(PointerToBufferAddress:= PointerToBuffer, SizeOfBuffer := SizeOfBuffer);
TagListBuffer.SetBuffer(PointerToBufferAddress := ADR(Tags), SizeOfBuffer := SIZEOF(Tags));
TagListSeekBuffer.SetBuffer(PointerToBufferAddress := ADR(TagsSeek), SizeOfBuffer := SIZEOF(TagsSeek));
TagBuffer.SetBuffer(PointerToBufferAddress := ADR(Tag), SizeOfBuffer := SIZEOF(Tag));
ToStartBuffer
PUBLIC
Jump to the beginning of the XML data XML.ToStartBuffer();
Implementation
SearchPosition := 0;
TagListSeekBuffer.Length := 0;
TagsSeek := '';
Tag := '';
WriteDocumentHeader
PUBLIC
Add your own preffered fileheader like: XML: <?xml version="1.0" encoding="UTF-8"?> Start with calling this method before appending any other tags! XML.WriteDocumentHeader('<?xml version="1.0" encoding="UTF-8"?>');
Parameters
| Name | Type | Description |
|---|---|---|
Header |
T_MaxString |
Implementation
XmlBuffer.Append := Header;
Properties
Length : UDINT
GET
Declaration source
(*
Organizes parsing and composing of XML data. Data can be treated as STRING or char array.
Buffer size of file can be set via GVL_Param_TcUnit (xUnitBufferSize)
*)
FUNCTION_BLOCK FB_XmlControl
VAR
XmlBuffer : FB_StreamBuffer;
TagListBuffer : FB_StreamBuffer;
Tags : T_MaxString;
TagListSeekBuffer : FB_StreamBuffer;
TagsSeek : STRING;
TagBuffer : FB_StreamBuffer;
Tag : T_MaxString;
TagOpen: BOOL;
Select : UDINT;
SearchPosition : UDINT;
END_VAR
VAR CONSTANT
TAG_OPEN : STRING(1) := '<';
TAG_CLOSE : STRING(1) := '>';
END_TAG_CLOSE : STRING(2) := '/>';
SPACE : STRING(1) := ' ';
EQUALS : STRING(1) := '=';
QUOTE : STRING(1) := '"';
BACK_SLASH : STRING(1) := '\';
FORWARD_SLASH : STRING(1) := '/';
OPEN_COMMENT : STRING(5) := '<!-- ';
CLOSE_COMMENT : STRING(4) := ' -->';
TAB : STRING(2) := '$T';
CR_LF : STRING(4) := '$R$N';
// $OD : ASCII code for carriage return (CR)
// $$ : to add a $R
// $' : to add ' (apostrophe)
// $L or $l : line feed
// $N or $n : new line
// $P or $p : next page
// $R or $r : end of line
END_VAR