文件交换
48下载
更新2012年1月2日
视图版本历史
该函数现在替换包含_dash_的元素和属性名称 - ,_dot_ by。和_colon_ by:
修复了val2str子函数中的bug
删除了val2str子函数中的for循环,从而大大提高了速度。
通过去除循环并利用T.Lohuis建议来增加Str2Val子功能的速度。
将多行字符串(或数组)的处理速度提高160%。
增加了Philipp Orth建议的屏幕输出功能
添加了一个错误格式的属性警告
查看许可证
此函数将MATLAB结构转换为XML文件。
Wouter Falkena(2021)。struct2xml.(//www.tatmou.com/matlabcentral/fileexchange/28639-struct2xml), MATLAB中央文件交换。检索2021年6月16日。
2021年3月31日
提示:如果你需要迭代一个内部有单元格数组的结构,(也就是这个函数所需的格式),在这里使用structree函数://www.tatmou.com/matlabcentral/fileexchange/31736-cell-struct-tree-and-strue-sorting.
2021年3月29日
2020年11月13日
在val2str中有一个小问题,它检查ischar(val)。对于“这样的字符串”,它返回false,因此无法添加值。除此之外,工作得很好
2020年3月15日
2019年12月4日
2019年4月12日
2018年12月19日
你好,脚本中的示例有点令人困惑。Matlab使用两个逗号来定义一个字符串而不是一个字符(第172行),如果代码分别使用函数val2str num2str(第175行),那么使用逗号来定义数字是不必要的。
2017年10月19日
2017年9月22日
2017年9月7日
2017年8月24日
完美的工作!谢谢!
2017年8月15日
我添加了两种方法来提高第57行的可用性。s = structarray2cell;s = removeEmptyTextFields(s);
函数s =删除提取文本(s)%防止在文本字段为空时出现以下错误,如after% xml_struct = xml2struct(xml_file);% struct2xml(xml_struct, xml_file);% %使用xmlwrite出错(第82行)Java异常:%% java.lang.nullpointerexception.% %% % at com.mathworks.xml.XMLUtils.serializeXML(XMLUtils.java:192)% %% % at com.mathworks.xml.XMLUtils.serializeXML(XMLUtils.java:49)% %% %struct2xml中的%%错误(第77行)% % xmlwrite(文件,docNode);切换类例“细胞”cellfun(…@removeEmptyTextFields,年代,…'统一输出',false);例“结构”如果是菲尔德(s,'text')if isempty(s.Text)s = rmfield(s, '文本');如果%缺乏终点如果%ISFIELD,则终端%如果是isempty(s)||......Isequal(s,struct())返回;如果%缺乏终点structfun(…@removeEmptyTextFields,年代,…'统一输出',false);否则%什么也不做结束%例% %开关类(年代)% % removeEmptyTextFields函数结束
函数s = structArray2cell(s)%避免外部函数中的num2cell(s)切换类例“细胞”cellfun(…@ structarray2cell,s,...'统一输出',false);例“结构”如果是isempty(s)||......Isequal(s,struct())返回;elseifiscalar(s)structfun(…@ structarray2cell,s,...'统一输出',false);Else %if ~isscalar(s)s = structArray2cell(num2cell(s));结束%if.否则%什么也不做结束%例% %开关类(年代)END%函数%structarray2cell
2016年12月1日
它必须是一个结构的细胞:
m代码:< subbelem name="name3" desc="description3" number="3"/>< subbelem name="name5" desc="description5" number="5"/> ELEM>
XML:elem.Attributes.name = '名称';elem.Attributes.desc =“描述”;elem.subelem {1} .Attributes.name =“name3”;elem.subelem {1} .Attributes.desc =“description3”;elem.subelem {1} .Attributes.number ='3';elem.subelem {2} .Attributes.name =“name5”;elem.subelem {2} .Attributes.desc =“description5”;elem.subelem {2} .Attributes.number ='3';
2016年11月30日
结构必须是什么格式?如果有嵌套结构,它似乎会中断。
2016年9月26日
用matlab r2016a替换函数"val2str()中的第166行":str = [];经过str = ";
我试过了,似乎能解决
2016年9月19日
你有没有解决这个错误?
2016年8月29日
xmlwrite。m在R2016a的82线坠毁
原因可能是“新的”Java版本与JAXP (MATLAB使用)相结合:http://stackoverflow.com/questions/21393323/jaxb-marshaller-throwing-nullpointerexception-when-upgrading-from-java-6-to-java
2016年4月8日
如果结构具有空条目,则具有Java异常的Struct2XML BOMB。在早期的Matlab版本中没有发生问题。
有人能修一下吗?
2014年8月13日
2014年6月13日
伟大的剧本。我不知道为什么我的struct's'没有用XML文件写入。我正在使用以下声明
文件= struct2xml(年代);
其中“文件”是我想要保存结构的XML文件和我的结构。但是,创建非XML文件。你能帮助我吗?我错过了什么?谢谢
2014年3月28日
真的很不错
2014年3月6日
2014年2月28日
谢谢!要将其提供支持逻辑字段,我金宝app拓宽了第172行(Val2str)的条件:
Elseif (isnumeric(val) || islogical(val))val = num2str (val);
2014年2月25日
2013年8月28日
非常感谢。它对我来说确实很好。
2012年6月5日
我有一个。mat文件,我需要把它转换成。xml文件。有人能帮我如何使用这个函数吗?我总是得到一个关于输入参数的错误。
2012年1月3
嗨哈拉尔德,
函数在主结构中需要单个字段的原因是,正确格式化的XML文档只有一个根元素(http://www.w3schools.com/xml/xml_dtd.asp).该规则的唯一例外是一个更复杂的XML序言,该函数目前不支持它。金宝app
对于第二点,XML文件通常有多个具有相同名称的元素。为了将其转换为MATLAB结构,可以使用数组。这意味着isstruct(s.(curfield))确实可能不起作用,但在那种情况下如果iscell (s。(curfield))MIN(Cellfun(@(a)是strist(a),s.curfield))结尾它会告诉你数组中的所有单元格都是结构体。
我希望这能稍微解释一下如何使用这个函数。如果您有任何问题,请随时与我联系。
问候,韦特
看了这些评论后,我对它寄予厚望,但是……"主结构中应该有一个字段"为什么?但更糟糕的是:对于一个struct数组,调用"isstruct(s.(curfield)"会崩溃,因为返回值是一个数组!
2012年1月1
嗨,埃米尔,
该功能确实替换了字符 - :。使用_(也看到函数帮助)。应该可以重写替换函数:使用_colon_独特的东西,并且让struct2xml替换为:。如果您仍然需要此功能,请告诉我。结构名称确实变得更长时间......
2011年12月15日
伟大的脚本......只是一个问题。当我加载XML时,我注意到了xml2struct
<?xml version = " 1.0 " encoding = " utf - 8 " ?><正面:配方xmlns:阿德尔
然后使用struct2xml导出我得到
<?xml version = " 1.0 " encoding = " utf - 8 " ?>将:替换为_它似乎是弹出的,因为根和属性是结构,而在MatLab和MatLab不允许:字符的结构。
如果这不会影响文件的有效性,我可以。如果是的话,我将不得不做一些修改:(
2011年9月18日
谢谢赫伯特寻找并成功消除这个错误。我已将固定文件上传到Matlab Central。
伟大的工具。帮了很大的忙。但我发现了一个小bug。尝试转换如下内容:a.b.Text = ";由于val2str(…)中的错误,B = struct2xml(a)抛出一个异常。
简单的解决办法是替换
......如果(isempty (val))%没做什么......
经过
如果(isempty (val))返回;
在函数val2str(…)
2011年4月12日
你是正确的。但是,isspace并不对单元格进行操作。在最新的更新中,我将for循环全部删除,并在多行字符串上使用isspace。这是目前最快的方法。再次感谢你们的支持。金宝app
感谢Wouter对该功能的更新!
如果我错了,请纠正我,但在我的测试中,使用ISSpace的空格方法比regexprep快速快40倍。(我使用一个非常长的阵列,[148701x1双],值)
替换:Str_cell = regexprep(tmp_cell,'[]*', ');
和:WhiteSpace = Isspace(TMP_CELL(:));nonspace =(空格+ [0空格(1:end-1)])〜= 2;str_cell = tmp_cell(是非空间);
2011年4月10
谢谢Thijs为我的注意力带来这一点。然而,问题谎言不在regexprep中,但在for循环中。我已经改变了for循环来构建MultiLind Sting的单元格数组,并仅执行一次regexprep。来自Matlab Profiler,我获得了您的方法已更快38%。使用该单元格的Regexprep应比以前更快地为160%。我今天将上传新功能,希望明天将从Mathworks提供。再次感谢这个建议!
2011年4月8日
对于更长的值数组,它需要很长的处理时间!,使用这个--空白= isspace(tmp(我,:));nonspace =(空格+ [0空格(1:end-1)])〜= 2;%仅删除双色空白)STR = [STR tmp(i,nonspace) sprintf('\n')]--
而不是:--str = (str regexprep (tmp(我 ,:),'[ ]*', ' ') sprintf (' \ n '));--
2011年1月11日
非常容易使用。非常感谢
2010年12月7日
快速和工作就像我所期望的一切,直到现在(这不是我在Matlab中心发现的其他Struct<->XML转换的情况)。非常感谢。
启发:带有bug修复的Struct2xml那struct2xml(s,varargin)那显微镜图像浏览器(MIB)那显微镜图像浏览器2 (MIB2)
找到Matlab Central中的宝藏,并发现社区如何帮助您!
在单个可执行文档中创建带有代码、输出和格式化文本的脚本。
了解实时编辑
选择一个网站来获得可用的翻译内容,并看到当地的活动和提供。根据您所在的位置,我们建议您选择:。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。
与当地办事处联系
提示:如果你需要迭代一个内部有单元格数组的结构,(也就是这个函数所需的格式),在这里使用structree函数:
//www.tatmou.com/matlabcentral/fileexchange/31736-cell-struct-tree-and-strue-sorting.
在val2str中有一个小问题,它检查ischar(val)。对于“这样的字符串”,它返回false,因此无法添加值。除此之外,工作得很好
你好,
脚本中的示例有点令人困惑。Matlab使用两个逗号来定义一个字符串而不是一个字符(第172行),如果代码分别使用函数val2str num2str(第175行),那么使用逗号来定义数字是不必要的。
完美的工作!谢谢!
我添加了两种方法来提高第57行的可用性。
s = structarray2cell;
s = removeEmptyTextFields(s);
函数s =删除提取文本(s)
%防止在文本字段为空时出现以下错误,如after
% xml_struct = xml2struct(xml_file);
% struct2xml(xml_struct, xml_file);
% %使用xmlwrite出错(第82行)
Java异常:
%% java.lang.nullpointerexception.
% %
% % at com.mathworks.xml.XMLUtils.serializeXML(XMLUtils.java:192)
% %
% % at com.mathworks.xml.XMLUtils.serializeXML(XMLUtils.java:49)
% %
% %
struct2xml中的%%错误(第77行)
% % xmlwrite(文件,docNode);
切换类
例“细胞”
cellfun(…
@removeEmptyTextFields,年代,…
'统一输出',false);
例“结构”
如果是菲尔德(s,'text')
if isempty(s.Text)
s = rmfield(s, '文本');
如果%缺乏终点
如果%ISFIELD,则终端%
如果是isempty(s)||......
Isequal(s,struct())
返回;
如果%缺乏终点
structfun(…
@removeEmptyTextFields,年代,…
'统一输出',false);
否则
%什么也不做
结束%例% %开关类(年代)
% % removeEmptyTextFields函数结束
函数s = structArray2cell(s)
%避免外部函数中的num2cell(s)
切换类
例“细胞”
cellfun(…
@ structarray2cell,s,...
'统一输出',false);
例“结构”
如果是isempty(s)||......
Isequal(s,struct())
返回;
elseifiscalar(s)
structfun(…
@ structarray2cell,s,...
'统一输出',false);
Else %if ~isscalar(s)
s = structArray2cell(num2cell(s));
结束%if.
否则
%什么也不做
结束%例% %开关类(年代)
END%函数%structarray2cell
它必须是一个结构的细胞:
m代码:
< subbelem name="name3" desc="description3" number="3"/>
< subbelem name="name5" desc="description5" number="5"/>
ELEM>
XML:
elem.Attributes.name = '名称';
elem.Attributes.desc =“描述”;
elem.subelem {1} .Attributes.name =“name3”;
elem.subelem {1} .Attributes.desc =“description3”;
elem.subelem {1} .Attributes.number ='3';
elem.subelem {2} .Attributes.name =“name5”;
elem.subelem {2} .Attributes.desc =“description5”;
elem.subelem {2} .Attributes.number ='3';
结构必须是什么格式?如果有嵌套结构,它似乎会中断。
用matlab r2016a替换函数"val2str()中的第166行":
str = [];
经过
str = ";
我试过了,似乎能解决
你有没有解决这个错误?
xmlwrite。m在R2016a的82线坠毁
原因可能是“新的”Java版本与JAXP (MATLAB使用)相结合:
http://stackoverflow.com/questions/21393323/jaxb-marshaller-throwing-nullpointerexception-when-upgrading-from-java-6-to-java
如果结构具有空条目,则具有Java异常的Struct2XML BOMB。在早期的Matlab版本中没有发生问题。
有人能修一下吗?
伟大的剧本。我不知道为什么我的struct's'没有用XML文件写入。我正在使用以下声明
文件= struct2xml(年代);
其中“文件”是我想要保存结构的XML文件和我的结构。但是,创建非XML文件。你能帮助我吗?我错过了什么?
谢谢
真的很不错
谢谢!要将其提供支持逻辑字段,我金宝app拓宽了第172行(Val2str)的条件:
Elseif (isnumeric(val) || islogical(val))
val = num2str (val);
非常感谢。它对我来说确实很好。
我有一个。mat文件,我需要把它转换成。xml文件。有人能帮我如何使用这个函数吗?我总是得到一个关于输入参数的错误。
嗨哈拉尔德,
函数在主结构中需要单个字段的原因是,正确格式化的XML文档只有一个根元素(http://www.w3schools.com/xml/xml_dtd.asp).该规则的唯一例外是一个更复杂的XML序言,该函数目前不支持它。金宝app
对于第二点,XML文件通常有多个具有相同名称的元素。为了将其转换为MATLAB结构,可以使用数组。这意味着isstruct(s.(curfield))确实可能不起作用,但在那种情况下
如果iscell (s。(curfield))
MIN(Cellfun(@(a)是strist(a),s.curfield))
结尾
它会告诉你数组中的所有单元格都是结构体。
我希望这能稍微解释一下如何使用这个函数。如果您有任何问题,请随时与我联系。
问候,
韦特
看了这些评论后,我对它寄予厚望,但是……"主结构中应该有一个字段"为什么?但更糟糕的是:对于一个struct数组,调用"isstruct(s.(curfield)"会崩溃,因为返回值是一个数组!
嗨,埃米尔,
该功能确实替换了字符 - :。使用_(也看到函数帮助)。应该可以重写替换函数:使用_colon_独特的东西,并且让struct2xml替换为:。如果您仍然需要此功能,请告诉我。结构名称确实变得更长时间......
问候,
韦特
伟大的脚本......只是一个问题。当我加载XML时,我注意到了xml2struct
<?xml version = " 1.0 " encoding = " utf - 8 " ?>
<正面:配方xmlns:阿德尔
然后使用struct2xml导出我得到
<?xml version = " 1.0 " encoding = " utf - 8 " ?>
将:替换为_
它似乎是弹出的,因为根和属性是结构,而在MatLab和MatLab不允许:字符的结构。
如果这不会影响文件的有效性,我可以。如果是的话,我将不得不做一些修改:(
谢谢赫伯特寻找并成功消除这个错误。我已将固定文件上传到Matlab Central。
伟大的工具。帮了很大的忙。但我发现了一个小bug。尝试转换如下内容:
a.b.Text = ";
由于val2str(…)中的错误,B = struct2xml(a)抛出一个异常。
简单的解决办法是替换
......
如果(isempty (val))
%没做什么
......
经过
如果(isempty (val))
返回;
在函数val2str(…)
你是正确的。但是,isspace并不对单元格进行操作。在最新的更新中,我将for循环全部删除,并在多行字符串上使用isspace。这是目前最快的方法。再次感谢你们的支持。金宝app
感谢Wouter对该功能的更新!
如果我错了,请纠正我,但在我的测试中,使用ISSpace的空格方法比regexprep快速快40倍。(我使用一个非常长的阵列,[148701x1双],值)
替换:
Str_cell = regexprep(tmp_cell,'[]*', ');
和:
WhiteSpace = Isspace(TMP_CELL(:));
nonspace =(空格+ [0空格(1:end-1)])〜= 2;
str_cell = tmp_cell(是非空间);
谢谢Thijs为我的注意力带来这一点。然而,问题谎言不在regexprep中,但在for循环中。我已经改变了for循环来构建MultiLind Sting的单元格数组,并仅执行一次regexprep。来自Matlab Profiler,我获得了您的方法已更快38%。使用该单元格的Regexprep应比以前更快地为160%。我今天将上传新功能,希望明天将从Mathworks提供。再次感谢这个建议!
对于更长的值数组,它需要很长的处理时间!,使用这个
--
空白= isspace(tmp(我,:));
nonspace =(空格+ [0空格(1:end-1)])〜= 2;%仅删除双色空白)
STR = [STR tmp(i,nonspace) sprintf('\n')]
--
而不是:
--
str = (str regexprep (tmp(我 ,:),'[ ]*', ' ') sprintf (' \ n '));
--
非常容易使用。非常感谢
快速和工作就像我所期望的一切,直到现在(这不是我在Matlab中心发现的其他Struct<->XML转换的情况)。非常感谢。