XML和MATLAB交互的基本操作[2]:寫入XML
最近工作中遇到了這樣的需求:
- 數據存儲於XML文件中
- 需要將XML文件中的部分數據進行讀取後處理
- 將處理好的數據寫入新的XML文件
在上一篇文章中,我們處理了第一和第二條任務,這一次就來看看最後的任務。
上一次我們取得的數據是
values = ["true","false","true"]ntexts = ["1","2","3"]n
我們希望寫入後的xml格式如下
<?xml version="1.0" encoding="utf-8"?>n<newroot>n <!-- This is a comment -->n <newdata key="1">true</newdata>n <newdata key="2">false</newdata>n <newdata key="3">true</newdata>n</newroot>n
簡單的分析下結構
newroot---(第一層)n |----Comment (第二層)n |----newdata[key=1]n |------text=true (第三層)n |...n
我們根據節點和元素的順序一個一個來
%建立文檔及根節點ndocNode = com.mathworks.xml.XMLUtils.createDocument(newroot)n%根節點ndocRootNode = docNode.getDocumentElement;n%建立第一個注釋子元素ncommentElement = docNode.createComment(This is a comment);n%將注釋元素附在根節點的子項上ndocRootNode = docRootNode.appendChild(commentElement);n
這時我們的xml是這樣一個形式
<newroot><!--This is a comment--></newroot>n
我們繼續在根節點下加入子元素
for i = 1:numel(values)n value = values(i);n text = texts(i); n %建立第二層子元素n thisElement = docNode.createElement(newdata);n %設置子元素的鍵值n thisElement.setAttribute(key,text);n %建立第三層節點n textNode = docNode.createTextNode(value);n %將第三層加入到第二層n thisElement.appendChild(textNode);n %將第二層加入到第一層n docRootNode.appendChild(thisElement);nendn
最後,我們將文檔寫入xml文檔
xmlwrite(output.xml,docNode);n
就大功告成了
<?xml version="1.0" encoding="utf-8"?>n<newroot><!--This is a comment-->n <newdata key="1">true</newdata>n <newdata key="2">false</newdata>n <newdata key="3">true</newdata>n</newroot>n
值得一提的是,我們的很多實際操作都是在docRootNode上進行的,而最後寫入的卻是docNode,這給人以pass by reference的錯覺。
事實上我們一直在調用Java Apache Xerces的API,而Java的"Pass by value"對於Object來說有很多討論,有興趣的可以看這裡,這裡,和這裡。
推薦閱讀:
※Matlab如何對二維數據分類
※有沒有地理信息可視化的繪圖軟體?
※matlab中的randn函數如何重複前一次的隨機數?
※Lingo和Matlab在解決最優化問題的時候的優缺點?
※機器學習筆記16 —— 編程作業5線性回歸演算法的評估
TAG:MATLAB |