2012-08-16 183 views
2

我想讀一個XML文件並修改一些字符串,保存然後用MATLAB關閉文件。到目前爲止,我有:MATLAB:修改XML文件並保存

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> 
+0

您正在關閉'''標記與''。我認爲這是一個錯字? – Chris 2012-08-16 09:40:20

+0

是的,更新... – lola 2012-08-16 09:43:55

+0

有一件事我會留意的是,至少對我來說,當我打開並保存一個xml文件時,MatLab總會爲我添加一堆空白。但我沒有使用fopen,我用xmlread。我不得不寫我自己的文件來解析XML文件,以刪除爲我添加的空白matlab。 – 2012-08-16 13:17:39

回答

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'); 

如果這是真的一個一次性問題,破解上面確定。但是,正如@bdecaf所建議的那樣,您應該使用適當的工具來完成這項工作。我建議完全在MATLAB之外完成編寫(以避免過於複雜的代碼),並且只需通過MATLAB的系統調用語法(類型help !)調用外部工具/庫。

1

在你的榜樣,你從未看過的文件。

但是對於XML,如果使用java XML工具,則可以節省很多麻煩。你可以直接從Matlab中調用它們。

+0

我怎麼能這樣做? – lola 2012-08-16 09:27:08

+1

這是從Matlab使用Java:http://www.mathworks.de/help/techdoc/matlab_external/f44062.html - 關於XML和Java有數百個由搜索找到的漂亮教程。 – bdecaf 2012-08-16 11:22:06

+0

同意@bdecaf。類似的功能可以通過.NET獲得 - Matlab也支持:http://www.mathworks.com/help/techdoc/matlab_external/brpb5k6.html – 2012-09-01 00:34:18