writestruct不繁殖readstruct的输入

8视图(30天)
我觉得很不安,应用writestruct结构创建readstruct不复制原始的输入:见下面的例子。
是否有办法解决这个问题吗?Readstruct非常方便阅读和修改lighweight xml文件(就我而言xdmf文件由Paraview)但这个问题在我看来是一个主要的缺陷。
谢谢你的任何建议。
阿德里安。
> >类型input.xml
< ?xml version =“1.0”编码=“utf - 8”? >
<标签1版本=“2”>
<标签2的名字=“foo”>
1 2 3
< /标签2 >
< /标签1 >
> > h = readstruct (“input.xml”,“structnodename”,“标签1”);
> > writestruct (h,“output.xml”,“structnodename”,“标签1”)
> >类型output.xml
< ?xml version =“1.0”编码=“utf - 8”? >
<标签1版本=“2”>
<标签2的名字=“foo”>
<文本> 1 2 3 < /文本>
< /标签2 >
< /标签1 >
> >
1评论
Stephen23
Stephen23 2023年2月16日
编辑:Stephen23 2023年2月17日
“readstruct writestruct并不复制输入”
这也不是期望:有一个大组的输入文件导入后会产生完全相同的结构。XML标准明确指出,大量的文件格式(如不同的空格)和“不相关的”XML格式(例如,属性点)不显著,应该被认为是等价的。在您的特定例子中,注意XML元素可以包含文本、属性,其他元素,或任何组合的这些:
你的“1 2 3”本身不是元素或属性,因此必须文本。MATLAB在语义上是正确的。
“…但这个问题在我看来是一个重大缺陷。”
你的建议是不可能的:一般没有办法知道哪些具体的XML文件生成一个特定的结构,当导入MATLAB(或任何其他应用程序)。XML标准特别指出这一点 不应该 是可能的。
这不仅适用于READSTRUCT / WRITESTRUCT,但其他“一对”,导入/导出功能,例如READMATRIX接受一组不可数大的输入文件,从矩阵仅WRITEMATRIX不能繁殖。这是一个必要的应用Postel定律的推论:

登录置评。

接受的答案

杰里米·休斯
杰里米·休斯 2023年2月16日
不幸的是,没有办法得到发生100%的时间,和readstruct / writestruct无意这样做。事实上,反复从数据源和其他代表很少完全round-tripable除非两个系统被设计在一起。
在这种情况下,为了能做文档转换,你必须知道远比什么是MATLAB结构存储的能力。如数据是否在一个属性或文本节点的一部分在你的情况下,或在一个名叫“文本”的节点开始....或者这个东西:
< ?xml version =“1.0”编码=“utf - 8”? >
<标签1版本=“2”>
<标签2的名字=“foo”>
<文本> 1 > < /文本
2 <文本> < /文本>
<文本> 3 < /文本>
< /标签2 >
< /标签1 >
得到的那种忠诚的往返XML在所有有效的XML文件,你一定会失去一些简单。本质上,没有一个1:1的MATLAB结构和XML之间的映射。可用性得到,还有些sembalance你必须移动到对象。
好(ish)新闻,有一个MATLAB XML DOM: //www.tianjin-qmedu.com/help/matlab/import_export/importing-xml-documents.html, 它(和同样xmlread)将允许你做任何事,但成本一个陡峭的学习曲线,和更多的代码的复杂性。注意,XML DOM api不是由MathWorks设计;这里的规范: https://www.w3.org/TR/WD-DOM/
…但我不推荐阅读,除非你睡不着。
基本上,它不是一个简单的问题。XML是一种非常复杂的格式,使用它可以是痛苦的。readstruct / writestruct是关于获得一些MATLAB数据格式和回来,而不是反过来,尽管readstruct应该允许您获取数据到MATLAB和使用通用的XML文件。
3评论
杰里米·休斯
杰里米·休斯 2023年2月21日
阿德里安·谢谢你的信息,
我把在一个增强请求一个选项来处理“文本”字段。

登录置评。

更多的答案(0)

类别

找到更多的在数独帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的