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

1 次查看(过去 30 天)
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?

采纳的回答

Voss
Voss 2024-6-12
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>

更多回答(1 个)

Matt
Matt 2024-6-12
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.

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by