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