Simple and straightforward XML parsing and composing library, characterized by it relative small memory footprint.
This library will be moved under the co5e umbrella, see [#11].
Due to its small footprint it can be used in budget friendly controllers. Since the library is able to read small chunks of files into memory (or write small chunks to disk) the buffer can be any arbitrary size, as defined by the user. The same library also contains a File Control (to open/close/read/write files) and a StringBuffer solution (to compose strings in memory).
The example project now contains an additional application which includes a pretty large demo xml file to demonstrate this behavior.
The maximum memory buffer size (parameter) is set smaller than the xml file size.
One FB gets the recipe names from the file and stores the location in the file where the recipe is.
Another FB can read the children of the recipe. This way not all data has to be parsed, but only the required data. This keeps not only keeps the memorybuffer small, but also the structures which contain the data.
Download Library v0.4.0.0
Download Example v0.4.0.0
VAR
XML : FB_XMLControl;
Buffer: STRING(GVL_Param_XmlControl.udiMaxFileSize);
// or buffer as an array of BYTE
Buffer: ARRAY [0..GVL_Param_XmlControl.udiMaxFileSize] OF BYTE;
END_VAR
// call
XML.pBuffer: = ADR (buffer);
XML.LenBuffer: = SIZEOF (buffer);
Add your own preferred XML fileheader i.e.:
<?xml version="1.0" encoding="UTF-8"?>
// call
XML.WriteDocumentHeader( '<?xml version="1.0" encoding="UTF-8"?>');
Compose a tag with a parameter:
<mytag paraname="11"></mytag>
// call
XML.newTag(sTagName: = 'MyTag');
XML.newParameter(Name: = 'ParaName', Parameter: = 11);
XML.CloseTag();
Add a value to the tag:
<mytag> MyText </ MyTag></mytag>
// call
XML.newTag(Name := 'MyTag');
XML.newTagData(TagData :='MyText');
XML.CloseTag();
// call
XML.toStartBuffer();
// call
XML.newComment(sTagName: = 'MyComment');
// call
XML.NextTag();
// call
XML.NextParameter(Parameter: = LastValue);
Feedback: Parameter returns the value found (string)
FB_FileControl: This function block can open, close, read and save a file from and to a generic PLC memory buffer. It can also read a small portions (chunks) of the file from disk to memory which enables you to load larger files in small portions.
FB_StringBuffer: Acts as an IO stream buffer for use with FB_XmlControl. Data can be treated as STRING or array of bytes. The stringBuffer can also be used as a basis for other purposes like txt, csv, etc, etc.
FB_XmlControl: Organizes Parsing and Composing of XML data. Filebuffersize can be set via library parameter (Gvl_Param_XmlControl)
Note:
Files do not necessarily need to be in a .xml format so you can use filecontrol to access or write any type of file.
Offcourse parsing and composing via xmlcontrol is only supported for xml formatted files.
Download Library v0.4.0.0
Download Example v0.4.0.0
@timvh for providing partial filereading/parsing