The XML Toolbox converts MATLAB data structures of any level of nesting into an XML string. It also reads most types of XML strings/files and converts these into a Matlab structure.
Six simple functions are provided for this task:
and help in xml_help.
This toolbox comes with an extensive pdf manual (35 pages).
Structures like this
>> project.name = 'MyProject';
>> project.id = 1234;
>> project.param.a = 3.1415;
>> project.param.b = 42;
can easily be converted with a command like str=xml_format(project,'off') to
The tinyxml2 needs Simulink Verification and Validation and Symbolic Math Toolbox packs to compile mexfiles...
I've found part of source code of this xml_toolbox at https://github.com/ovitrac/SFPDnmrspec. It works fine for me!!
Great potential, but doesn't work with reasonably current versions of MATLAB. Apparently need to use pcode to obfuscate the m files. Older obfuscation is no longer supported.
People who are still asking for the source code; I think it's time to let go and replace xml_toolbox with tinyxml2. Faster, works and easily to replace xml_toolbox with.
Could you please regenerate the pcode or post the mcode?
Has anyone been able to find a replacement or been able to replicate this code?
Dear Marc, post the source, please!
Could you you please regenerate the pcode or better yet post the source.
Source code please for this. I still need to have R2014 installed to do parts of my work.
I love this toolbox but it is no longer supported by Matlab (2016a).
The P-code file
generated prior to MATLAB version 7.5 (R2007b) and is no longer supported.
marc, please release the source .m files or regenerate the p.files. Thanks!
Nice library. Easy to use.
much faster and will work in 2014+ (parseany/formatany functionality is however not available) other functionality is equal.
This is an excellent toolbox - very easy to save structure arrays to XML and one can even load them back into the same types if the attributes switch is on, which is the default.
But from 2014b onwards, the Matlab Compiler requires that the source m-files are present when including p-files during compilation, which renders this toolbox useless for compiled applications, because the m-files are not available.
In light of this, is there any way that the author would consider making the m-files available?
After updating to R2014b, this doesn't work anymore with Matlab Compiler.
Can not work with Matlab Compiler. Fails due to warnings
@Joerg there is no reason to exchange XML between matlab and java, hook into java directly from matlab. Far (FAR) simpler.
I would ask Marc to provide the m-files.
Seems as if he has dumped the project.
Seems to be great work - stable through releases, well structured and with simple interfaces. We have to test if it suits our needs, as we would have to exchange the XML between Matlab and Java...
An option to work further on the code would be great, Marc!
I have now tested this submission all the way up to R2013a. It works. The warnings people are talking about are just that "warnings". It still works.
Other than cluttering up the command window or the DOS window for the stand alone executables, functionally I have no issues.
Though I would agree that someone should generate up to date .p files but then I am not sure if it would make it unusable for people with earlier versions of Matlab.
If the author doesn't mind sharing the source code, that would solve the problem too.
Of course, best possible solution is for Matlab to include this functionality with built-in functions.
Needs to be updated for newer versions of Matlab!
I like the submission a lot, nevertheless I get hte following error message:
Warning: The P-code file strsplit.p was generated prior to
MATLAB version 7.5 (R2007b) and will not be supported in a
future release. Use pcode to regenerate strsplit.p using
MATLAB R2007b or later.
Will there be an update?
This is powerful, very helpful. Thank you for the good work !!!
Great tool! But it's struggling for me as I go above 1 MB of XML. 1.5 MB takes about 45 seconds with xml_parse(). Duplicating the data (3 MB) takes a whopping 170 seconds. That's almost 4 times longer for only twice the data!
Any tips for me how I can get it to speed up a bit? Profiler says that 75% of the time is spent inside of xml_parse (overheads etc), so it's in there somewhere.
Completely useless!!!! Do not use!!! Closed-source software.
I am switching to xmltools (also available from MATLAB Central).
This will be the last time I make my project dependent on a closed-source freeware.
I'm running R2011b and can't try this because the p code is incompatible.
Are there any other options?
buggy, no way to debug due to closed source.
Unable to interprete special characters like > and < in the xml file.
Unable to interpret elements with line breaks between attribute values. Also failed to correctly parse an XML tree composed of nested elements all of the same name and attributes (though the specific values of those attributes differed between elements).
With Matlab R2007b everything works find, but with R2010b I got the following warning-message...
>Warning: The P-code file strsplit.p was generated prior to MATLAB version 7.5 (R2007b) and will not be
supported in a future release. Use pcode to regenerate strsplit.p using MATLAB R2007b or later.
I can't regenerate those files with R2010b. I don't know why...
This is a great tool.. Whats the chance in getting an updated p-code?
Hi guys i have doubt is it possible to import back the xml file which download earlier to simmechanics model back to cad model in xml format using this tool bar.
Exactly it is SimMechanics Model to CAD Assembly in xml format & viceversa
pl. help me in this same
Totally useful! Exactly what I was looking for! Thanks!
I have changed jobs and a rewrite and update of the XML toolbox will be available as soon as I find time for these... Please check back or add a watch to receive a notification.
If you require urgent specialised changes or integration, please contact me at firstname.lastname@example.org.
As of Matlab 2010b, xml_toolbox is useless since p-file obfuscation has changed in matlab, requiring the original source m-file to make new p-files from. Any plans to release updated p-files?
Great job! This is a wonderful set of tools.
you have forgot to ignore the white spaces in the XML file dude (in the xml_load function)
doesn't work when there are gaps in the xml file
Very disappointing closed source software. I do not recommend at all.
Regarding my last post. I found the troublemaker: saving a char with the value 0 leads to a missing closing tag:
Matlab: xml_save('foo.xml', char(0);
foo.XML: <?xml version="1.0"?>
<!-- Written on 03-Feb-2010 10:59:59 using the XML Toolbox for Matlab -->
<root xml_tb_version="3.1" idx="1" type="char" size="1 1">
As you can see, the root tag is not closed.
Found one more annoying bug, that's why I downgraded my rating:
it produces invalid XML code in some cases (I have a structure containing some empty fields, the resulting XML file is ~500kB containing invalid XML code)
@Joao: There are M files included, but they contain only comments, no source code.
Great! It was useful for me many times now.
Schroen, I think you are mistaken. The source code IS included.
Nice idea. But no source code provided, which might be OK if the program weren't buggy:
In some cases, saving a matrix containing doubles and nan's leads to the error "NaN's cannot be converted to logicals."
Does not handle XML files that have the same tag name repeated, since this uses the tag name as the field name for matlab structures. This tool appears to ignore all but the last tag of repeated tag names.
I prefer the output format of "XML parsing tools" (FX id 3074), which does handle this, however that one runs painstakingly slow and does not handle comments.
I'm getting an error message for xml_load when running from command line:
"v = xml_load('Samoa.xml');
??? Attempt to execute SCRIPT xml_load as a function:
The file is in the current directory.
Is this supposed to work with cell arrays? I tried to use it with a cell array and it crashed.
Thanks a lot! Much more efficient than the alternative xml_io_tools (although open source would of course be nice). However, it completely messes up character arrays. If you create an array with a char() function that consists of e.g. four character strings (size 4 x 400), the corresponding XML output is nonsense. On the other hand, writing separate lines as items creates a problem for other software which reads my XML files. There should be an option to concatenate array elements together in the XML file, rather than writing them out as separate 'item' elements.
correction: user 3 has the same topics that 4 has.
I was trying to use xml_parseany from a big file, and it doesnt work properly. For example,
When this is parsed, user id 2 and 4 dont have topics, but when the struct is created these users have the topics from the last user that had topics.
In this case, user 2 has the same topics that user 1 has, and user 4 has the same topics that 4 has.
Good job, but the import of an xml file in MatLab may contain redundant data.
Here is an example, where the MatLab generated structure contain redundant data
<?xml version="1.0" ?>
<polygon id="polygon1" nVertices="3">
<segment n="1" x0=" 0.0" x1="966.0" y0=" 86.0" y1="142.0" />
<segment n="2" x0="966.0" x1="1983.0" y0="142.0" y1=" 0.0" />
<segment n="3" x0="1983.0" x1="0.0" y0="0.0" y1="86.0" />
good!.. it gives better results than other XML Toolboxes that I have tried for converting .gxl files (graph exchange format) into matlab structures.. Thanks
Does anyone know how the attributes doesnt read
Hi, if TAG name has minus '-' then it gives the next error.
??? Error using ==> setfield
Error using ==> subsasgn
Invalid field name component.
Error in ==> C:\ProgramFiles\MATLAB71\toolbox\xml_toolbox\xml_parseany.p>xml_parseany at 154
Error in ==> C:\ProgramFiles\MATLAB71\toolbox\xml_toolbox\xml_parseany.p>xml_parseany at 163
Can it be fixed please.
This XML toolbox was great for my needs:
It allows an easy reading of XML files into matlab and the data handling is efficient.
Soy profor universitario y me gustaria probar las prestaciones de esta herramienta
Very useful tool. One question: I have warnings that the p-files (28/01/2005) are older than the m-files (15/04/2005). Do I need to create new p-files, based on the m-files in the ZIP? Or is it better to do it not?
It is really a useful tool, but why couldn't i find the file 'xml_toolbox.pdf'?
If I have:
b: [3x3 struct]
3x3 struct array with fields:
where each of the 3x3 struct array of ATTRIBUTE is:
k: 1 %(some number)
j: 1 %(another number)
The xml that is generated is not correct...It only generates xml for the first of the 3x3 array of structs.
Any idea how to get around this issue?
Thanks - Kartik
It is a very effective function, but the drawback is that all the elements in the structure are cells and this cannot be changed. I need a structure of a certain format but have to convert every single element of the structure from cell to array.
It did the job for me, and my XML files are pretty complicated.
Buggy and closed source.
Suggest either testing under more versions of Matlab (e.g. 64 bit) or making m-files available for others to do the same.
It does what it is intended to do. The documentation was the only way I would have known how to get the CONTENT out of the structure. Since only p-files you cannot compile and make an *.exe if that matters to you. You can delete (or move) the m-files if the warning is bothering you, they are obviously just descriptions for when you call the function.
A Warning stating that the p code is older than the m code can be received when running some functions from this toolbox. Such warnings can be disabled by using:
%Use the desired toolbox functions now.
Very nice interface, but has many problems:
1) slow - a file parsed by readxml in 13 sec took 8 min for xml_parseany
2) buggy - If you stray from examples than both reading and writing can produce wrong results, like invalid xml code.
3) lack of .m files prevents debugging
That was I'm searching for!
Best free tool what I ever seen
Good functionality, but the p-file coding limits it usability.
The functionality is good. But be aware it is not open source and the author does not intent to make the source available.
Please try to use XML4MAT v2.0 instead.
Very simple and effective.
One small complaint: Matlab complains that the P-files are older than the M-files.
This is much easier to use than Matlab's built xmlread and xmlwrite which require you to be an expert handling XML DOM. It just works like you would expect it to work. The documentation and examples use code is good.
Concise and simple to use. Authors didn't fall into the "over do-it" trap of software tool development.
Just what I've been looking for - easy to use and powerful XML to Matlab converter! - Excellent tool.
manual xml_toolbox.pdf now included.
New version available. Does read XML attributes too.
Removed password for .zip file.