2

我想读取一个 XML 文件并修改一些字符串,保存然后用 MATLAB 关闭文件。到目前为止,我有:

f = fopen( 'output_results\results.xml', 'w' ); 

我需要optList在文件的节点内添加以下行(见下文):

<opt name="*_option1">true</opt>
<opt name="format">
    <f1>file:/C:/working/types.h</f1>
</opt>

保存然后关闭文件

fclose(f); 

如何在 XML 文件中添加上述行?

文件内容:

<?xml version="1.0" encoding="utf-8"?> 
<Custom_project name="" val="True" name="file1" path="file:/C:/Users/Local/Temp/info.xml" version="1.0">
<verif="true" name="values" path="file:/C:/Users/Temp/folder1">
    <optList name="values">
        <opt name="color">red</opt>
        <opt name="police">calibri</opt>
        <opt name="font">blue</opt>
    </optList>
</verif>
<toto="myvalue" name="option1">
    <opt name="myvalue_1">32</opt>
    <opt name="-total">All</opt> 
    <opt name="characteristic">hybrid</opt>
</toto> 
4

2 回答 2

1

在您的示例中,您从未阅读过该文件。

但是对于 XML,如果使用 java XML 工具可以省去很多麻烦。你可以直接从 Matlab 给他们打电话。

于 2012-08-16T09:23:46.803 回答
1

如发现here不可能打开一个文件,寻找一个位置,在那里添加东西,同时保留其余的文本,然后关闭。

您可以通过重写整个文件来解决这个问题:

f = fopen( 'output_results\results.xml', 'r' ); 
g = fopen( 'output_results\results.xml.TEMP', 'w' ); 

while ~feof(f)
    line = fgets(f);
    fprintf(g, '%s', line);
    if strcmpi(line, '<optList name="values">')
        fprintf(g, '%s\n%s\n%s\n%s\n',....
            '<opt name="*_option1">true</option>',...
            '<opt name="format">',...
            '<f1>file:/C:/working/types.h',...
            '</f1></option>');
    end
end

fclose(f), fclose(g);
movefile('output_results\results.xml.TEMP', 'output_results\results.xml');

如果这真的是一次性问题,那么上面的 hack 就可以了。但是,正如@bdecaf 所建议的那样,您应该使用合适的工具来完成这项工作。我建议完全在 MATLAB 之外进行编写(以避免过于复杂的代码),只需通过 MATLAB 的系统调用语法(类型help !)调用外部工具/库。

于 2012-08-16T09:51:55.247 回答