Clear Filters
Clear Filters

writestruct() fails to write empty child element to XML file

1 view (last 30 days)
I need to write a empty, nested element within an XML file. An XML example of what I'd like to achieve is:
<?xml version="1.0" encoding="UTF-8"?>
<Problem>
<elementA>14</elementA>
<elementB>
<child/>
</elementB>
</Problem>
The nested element in this case is called "child". I expected the following MATLAB code to produce this result:
s.elementA = 14;
s.elementB.child = [];
writestruct(s,'test.xml','StructNodeName','Problem')
However, this generates the following XML, whereupon the "child" element is entirely missing:
<?xml version="1.0" encoding="UTF-8"?>
<Problem>
<elementA>14</elementA>
<elementB/>
</Problem>
How can I produce a result with an empty, nested element?

Accepted Answer

Voss
Voss on 12 Jun 2024
s.elementA = 14;
s.elementB.child = struct();
writestruct(s,'test.xml','StructNodeName','Problem')
type('test.xml')
<?xml version="1.0" encoding="UTF-8"?> <Problem> <elementA>14</elementA> <elementB> <child/> </elementB> </Problem>

More Answers (1)

Matt
Matt on 12 Jun 2024
Well, not even 15 minutes and I found the solution myself. I find it strange that the following must be done to achieve a nested, empty element of an XML, but here is the approach:
s.elementA = 14;
s.elementB.child.dummy = [];
writestruct(s,'test.xml','StructNodeName','Problem')
Including the dummy field informs MATLAB that child is a struct (and not an empty double, as specified in my question). That child is now explictly a struct causes the creation of an empty "child" element in the XML.
<?xml version="1.0" encoding="UTF-8"?>
<Problem>
<elementA>14</elementA>
<elementB>
<child/>
</elementB>
</Problem>
I hope someone else finds this answer useful.

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!