matlab对xml文件操作,Matlab读写xml文件
xml文件以文檔對象模型表示,簡稱DOM(Document Object Model)。在Matlab中,使用xmlread讀取xml文件成DOM節(jié)點,對xml文件的操作轉(zhuǎn)化成對DOM節(jié)點的操作,使用xmlwrite把DOM節(jié)點寫入到xml文件中。
Matlab寫xml文件
以個人信息為例,通常個人的信息包括姓名、性別、住址和電話等等,其中電話可能有多個,比如手機和座機,代碼如下。
% file name
filename = 'info';
% create document
docNode = com.mathworks.xml.XMLUtils.createDocument('info');
% document element
docRootNode = docNode.getDocumentElement();
% name
nameNode = docNode.createElement('name');
nameNode.appendChild(docNode.createTextNode(sprintf('Jack')));
docRootNode.appendChild(nameNode);
% gender
genderNode = docNode.createElement('gender');
genderNode.appendChild(docNode.createTextNode(sprintf('male')));
docRootNode.appendChild(genderNode);
% address
addressNode = docNode.createElement('address');
addressNode.appendChild(docNode.createTextNode(sprintf('Beijing')));
docRootNode.appendChild(addressNode);
% phone
phoneElement = docNode.createElement('phone');
docRootNode.appendChild(phoneElement);
mobilephoneNode = docNode.createElement('mobilephone');
mobilephoneNode.appendChild(docNode.createTextNode('123456'));
phoneElement.appendChild(mobilephoneNode);
landlineNode = docNode.createElement('landline');
landlineNode.appendChild(docNode.createTextNode('012345'));
phoneElement.appendChild(landlineNode);
% xmlwrite
xmlFileName = [filename,'.xml'];
xmlwrite(xmlFileName,docNode);
簡單理解xml可以分為Document,Element和Node三級結(jié)構(gòu),Element可以嵌套Element和Node,Node是最小的xml單位。
注意其中g(shù)etDocumentElement(), createElement()和createTextNode()三個方法,分別是獲取Document, Element和Node的三個方法。此外注意appendChild()前面的元素決定了xml元素的結(jié)構(gòu),最后通過xmlwrite方法寫入到xml文件中,最終xml文件如下。
Jack
male
Beijing123456
012345
Matlab讀xml文件
讀取過程不光包括讀入xml文件,還需要解析,以之前存儲的info.xml為例,代碼如下。
% read xml
xmlDoc = xmlread('info.xml');
% name node
name_array = xmlDoc.getElementsByTagName('name');
name = char(name_array.item(0).getTextContent());
disp(['name:' name]);
% phone element
phone_array = xmlDoc.getElementsByTagName('phone');
phone = phone_array.item(0);
disp([char(phone.item(1).getNodeName()) ':' char(phone.item(1).getTextContent())]);
disp([char(phone.item(3).getNodeName()) ':' char(phone.item(3).getTextContent())]);
首先用xmlread讀入整個xml文件,此后通過getElementsByTagName(‘name’)找出name節(jié)點,注意沒有g(shù)etNodeByTagName方法,并且getElementsByTagName()得到的是一個NodeList數(shù)組,因為xml允許節(jié)點重名,可能有多個name節(jié)點,所以通過item(0)得到第一個name節(jié)點,并且通過getTextContent()方法輸出name節(jié)點的內(nèi)容。
同樣通過getElementsByTagName(‘phone’).item(0)找到phone節(jié)點,此處phone包含mobilephone和landline兩個子節(jié)點,通過測試發(fā)現(xiàn)phone節(jié)點item(0),item(2)和item(4)都是#text的節(jié)點,item(1)和item(3)分別代表mobilephone和landline兩個節(jié)點,通過getNodeName()和getTextContent()分別得到節(jié)點的名稱和內(nèi)容,結(jié)果如下。
name:Jack
mobilephone:123456
landline:012345
總結(jié)
以上是生活随笔為你收集整理的matlab对xml文件操作,Matlab读写xml文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《文明3》全攻略之设置篇
- 下一篇: 席慕容说