图片缩略图

Xml2struct,修复了错误并添加了特性

version 1.0.0.0 (3.17 KB) by CY Y
xml2struct的改进版本,将xml文档转换为MATLAB结构。

57下载

更新2017年3月9日

从GitHub

在GitHub上查看许可证

Xml2struct接受一个Java XML对象、一个XML文件或一个XML格式的字符串,并返回一个保持XML文档中的树关系的结构。它是另一个MATLAB文件交换提交的改进版本://www.tatmou.com/matlabcentral/fileexchange/28518-xml2struct.

具体来说,它具有以下特点:
1.解决了有注释时其他数据会丢失的问题。
2.修复了“double”类型的输入参数的未定义函数“toCharArray”问题。
3.增加了对xm金宝appl字符串的支持。

引用为

CY Y(2021)。Xml2struct,修复了错误并添加了特性GitHub (https://github.com/joe-of-all-trades/xml2struct)。检索.

意见及评分(35)

亚当Rubock

提示:如果需要迭代包含单元格数组的结构(即此函数生成的格式),请在此处使用structtree函数:
//www.tatmou.com/matlabcentral/fileexchange/31736-cell-struct-tree-and-struct-sorting

亚当Rubock

克劳迪奥·威尔曼斯

@Jeremiah Brown(您在2019年12月31日的评论):
我偶然发现了同样的问题。
这里的xml2struct版本(2017年3月09日更新)包含导致问题的行,这些行是'-'、':'和'的早期替换。'将产生一个包含下划线字符'_'的新"name"变量,然后被'u_'替换。
%----本地函数getNodeData-----
function [text,name,attr,childs,textflag] = getNodeData(节点)
%创建节点信息结构。
%确保允许名称作为结构名称
name = char (getNodeName (theNode));
名称=strep(名称“-”,“破折号”);
Name = strrep(Name, ':', '_colon_');
名称=strep(名称“,”点“);
Name = strrep(Name, '_', 'u_');

在我的例子中,只要更改替换下划线字符“\u1”的顺序,就会首先被替换,因此:
name = char (getNodeName (theNode));
Name = strrep(Name, '_', 'u_');
名称=strep(名称“-”,“破折号”);
Name = strrep(Name, ':', '_colon_');
名称=strep(名称“,”点“);

但是您的代码片段似乎已经完成了您注释掉的重新排序替换。
所以即使重新订购了替换品,你仍然会遇到这个问题吗?
如果节点名称包含下划线“\u1”字符,会发生什么情况?它能正常工作吗?

@叶兆元:你能用下划线来解决这个问题吗?那太好了。谢谢

阿洛伊斯素数

马辛·科诺瓦尔奇克

杰里米·布朗

这很有帮助。我遇到的一个问题是,我们的XML文件包含包含“u”的名称,而这些名称都被替换为“u_u”。在getNodeData函数中,我注释掉了第138行,并添加了代码,以便只查看name的第一个字符,如果name以“\u”开头,则在“u”前面加上前缀:
%名称=strrep(名称“,”u“);
名称=strep(名称“-”,“破折号”);
Name = strrep(Name, ':', '_colon_');
名称=strep(名称“,”点“);
If name(1) == '_'
名称=附加('u',名称);
终止

金宏孝

Kiarash你好

我想知道是否有类似于这个脚本的python?

刘家燕

Gernot Druml

感谢您为“double”类型的输入参数解决了“未定义函数‘toCharArray’”问题。

它使我不用一手编辑数百个文件!

阿萍乐

非常感谢您提供了这么好的工具。
顺便说一下,当转换XML元素的名称以匹配MATLAB结构字段名称要求时,
名称=strrep(名称“,”u“);应在“-”、“:”、“.”之前第一个,以避免意外影响。
例如:“a:int”变成“au\u colon\u int”而不是“a\u colon\u int”。

简·L

辛格

显示以下xml文件的意外MATLAB '<'运算符
https://msdn.microsoft.com/en-us/library/ms762271 (v = vs.85) . aspx

约翰

克雷斯滕

阿布阿斯贝先生

谢谢叶乔!
很有帮助!

subhasis adhikari

如何从输出结构文件中获取数据?我有一个包含图像文件的XML文件。我想读这个XML文件,我可以用这个程序来做。现在,我想制作图像,但我不知道如何从我使用这个程序得到的结构文件中获取数据。

Timofey Goloborodko

CY Y

对于Mark Tolman和Arun M,我认为这个问题应该现在就解决。我将chararray()改为char(),它应该总是出现在MATLAB中。

KAE

当xmlread文档中的示例对我的XML文件不起作用时,我尝试了这个方法,但是这个方法可以,所以谢谢。我还发现输出结构的组织结构易于操作和理解。

阿伦米

如何处理以下错误?

类型为“double”的输入参数的未定义函数“toCharArray”。

Wee-Lih李

迈克尔·赫尔姆伯格

导者达沙·沙阿

帮了大忙

马克杜尔曼

我得到以下错误。我应该在使用此脚本之前导入一些内容吗?我怎么修理它?

类型为“double”的输入参数的未定义函数“toCharArray”。

xml2struct_fixed>getNodeData中的错误(第153行)
文本。(textflag) = toCharArray (getTextContent (theNode)) ';

萨希特·瓦尔马

非常有用!
只是一个问题,我的XML文件中的字段不是从一个开始,而是在中间。但是uu正在被一个u_

CY Y

谢谢你!非常有用!

CY Y

@ Herve,我没有这样的脚本可用,但我认为你发布在另一个文件交换条目上的解决方案是有效的。

赫维·德米齐

是否有一个文件来恢复与R2016a兼容的操作?的一个https://fr.mathworks.com/matlabcentral/fileexchange/28639-struct2xml执行期间崩溃

CY Y

感谢R S指出这一点。现在,节点名中的前导_将被u_替换。MATLAB结构的字段名不能以_开头。

RS

节点名称以“\u1”开头时出错。尝试加载MS Visual Studio(2010)项目vcxproj文件。

CY Y

@Ian,谢谢你的评论。我已经解决了这个问题。

伊恩·克雷格

在第79行有一个错误(我打开了一个git问题),但其他方面做得很好。

雅安Ladroit

看起来很健壮。也相当快!真的对我有用非常感谢!

MATLAB版本兼容性
创建R2016b
与任何版本兼容
平台兼容性
窗户 macOS Linux
致谢

灵感来自:xml2struct

受到启发的:EnergyPlus联合仿真工具箱

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!