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

NameTypeDefaultDescription
XmlBufferFB_StreamBuffer
TagListBufferFB_StreamBuffer
TagsT_MaxString
TagListSeekBufferFB_StreamBuffer
TagsSeekSTRING
TagBufferFB_StreamBuffer
TagT_MaxString
TagOpenBOOL
SelectUDINT
SearchPositionUDINT
TAG_OPENSTRING(1)'<'
TAG_CLOSESTRING(1)'>'
END_TAG_CLOSESTRING(2)'/>'
SPACESTRING(1)' '
EQUALSSTRING(1)'='
QUOTESTRING(1)'"'
BACK_SLASHSTRING(1)'\'
FORWARD_SLASHSTRING(1)'/'
OPEN_COMMENTSTRING(5)'<!-- '
CLOSE_COMMENTSTRING(4)' -->'
TABSTRING(2)'$T'
CR_LFSTRING(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

NameTypeDescription
CommentT_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

NameTypeDescription
NameT_MaxString
ValueT_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

NameTypeDescription
NameT_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

NameTypeDescription
DataT_MaxString
Implementation
XmlBuffer.Append := TAG_CLOSE;
XmlBuffer.Append := Data;
TagOpen := FALSE;
SetBuffer PUBLIC

Parameters

NameTypeDescription
PointerToBufferPOINTER TO BYTEADR(..)
SizeOfBufferUDINTSIZEOF(..)
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

NameTypeDescription
HeaderT_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