File Exchange

image thumbnail

XML Toolbox

version 1.0 (225 KB) by

Conversion of MATLAB data types to XML and vice versa.

3.21818
60 Ratings

54 Downloads

Updated

No License

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:
xml_format()
xml_formatany()
xml_parse()
xml_parseany()
xml_load()
xml_save()
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
result in:

<project>
..<name>MyProject</name>
..<id>1234</id>
..<param>
....<a>3.1415</a>
....<b>42</b>
..</param>
</project>

Comments and Ratings (83)

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!!

Scott Stearns

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.

Stian

Stian (view profile)

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.

http://www.mathworks.com/matlabcentral/fileexchange/48308-tinyxml2-wrapperhttp://www.mathworks.com/matlabcentral/fileexchange/48308-tinyxml2-wrapper

Jordan Sweer

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!

kabla002

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.

David

David (view profile)

I love this toolbox but it is no longer supported by Matlab (2016a).

The P-code file
.\xml_toolbox\xml_load.p was
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!

Benjamin

Jordi Gil

Nice library. Easy to use.

@uwe:
http://www.mathworks.com/matlabcentral/fileexchange/48308-tinyxml2-wrapper

much faster and will work in 2014+ (parseany/formatany functionality is however not available) other functionality is equal.

Uwe

Uwe (view profile)

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?

Stian

Stian (view profile)

After updating to R2014b, this doesn't work anymore with Matlab Compiler.

Peter bjerg

Can not work with Matlab Compiler. Fails due to warnings

John

John (view profile)

@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!

Varoujan

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.

Moses

Moses (view profile)

Needs to be updated for newer versions of Matlab!

Michael

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?

Xilu Wang

Zhuo Li

Zhuo Li (view profile)

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.

Hdaniel

Michael

Completely useless!!!! Do not use!!! Closed-source software.

Xiaolong

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.

Joseph Areeda

I'm running R2011b and can't try this because the p code is incompatible.

Are there any other options?

Ad Client

buggy, no way to debug due to closed source.

Xiaolong

Unable to interprete special characters like &gt; and &lt; in the xml file.

Xiaolong

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).

Andreas K.

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...

Emil

Emil (view profile)

Emil

Emil (view profile)

This is a great tool.. Whats the chance in getting an updated p-code?

Bhuvan

Bhuvan (view profile)

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!

Marc Molinari

Marc Molinari (view profile)

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 marc_xml@scieng.co.uk.

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.

Erfan

Erfan (view profile)

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

Neil

Neil (view profile)

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.

João

João (view profile)

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."

Jesse Hopkins

Jesse Hopkins (view profile)

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.

Richard

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:
H:\mylib\xml\xml_toolbox\xml_load.p"

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.

Anna Kelbert

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.

Kyo Sohma

correction: user 3 has the same topics that 4 has.

Kyo Sohma

I was trying to use xml_parseany from a big file, and it doesnt work properly. For example,

<test>
<user id='1'>
<topic id='t1'>
<weight>60</weight>
</topic>
</user>
<user id='2'/>
<user id='3'>
<topic id='t3'>
<weight>20</weight>
</topic>
<topic id='t4'>
<weight>80</weight>
</topic>
</user>
<user id='4'/>
</test>

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.

Guillaume Jacquenot

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">
<lines>
<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" />
</lines>
<xMax>1983.0</xMax>
<yMax>142.0</yMax>
</polygon>

Gerard Sanromà

good!.. it gives better results than other XML Toolboxes that I have tried for converting .gxl files (graph exchange format) into matlab structures.. Thanks

manoj loganathan

superb

lin chen

hill how

BAO BING

Gerald Corzo

Does anyone know how the attributes doesnt read

Dil Djumanov

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.
Thanks

Jeremy Wilcox

This XML toolbox was great for my needs:
It allows an easy reading of XML files into matlab and the data handling is efficient.

Thanks!

tuan hoang minh

Jose Andrickson

Soy profor universitario y me gustaria probar las prestaciones de esta herramienta

Maarten V

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?

bill law

It is really a useful tool, but why couldn't i find the file 'xml_toolbox.pdf'?

K T

If I have:

a =

b: [3x3 struct]

where:

a.b =
3x3 struct array with fields:
ATTRIBUTE
CONTENT

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

�ris �lafsdóttir

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.

xia tian

Good

Almon Ing

It did the job for me, and my XML files are pretty complicated.

Jaakko R

Buggy and closed source.

Peter Cotton

Suggest either testing under more versions of Matlab (e.g. 64 bit) or making m-files available for others to do the same.

Randy Bithell

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. Belani

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:

warnings_state=warning('off','all');
%Use the desired toolbox functions now.
warning(warnings_state);

Jaroslaw Tuszynski

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

Knoll Gernot

That was I'm searching for!
Best free tool what I ever seen

Concern Matlab User

Jose Andrickson

Concern Reviewer

Good functionality, but the p-file coding limits it usability.

lywhus lywhus

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.

Ken Doniger

Very simple and effective.
One small complaint: Matlab complains that the P-files are older than the M-files.

Wilson Cheung

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.

Benjamin Davis

Concise and simple to use. Authors didn't fall into the "over do-it" trap of software tool development.

Stefan Zimmerman

Just what I've been looking for - easy to use and powerful XML to Matlab converter! - Excellent tool.

Updates

manual xml_toolbox.pdf now included.

New version available. Does read XML attributes too.

Removed password for .zip file.
"Please register at the given address."

MATLAB Release
MATLAB 6.5 (R13)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video