Matlab読み書きxmlファイル
8937 ワード
xmlファイルはドキュメントオブジェクトモデルで表され、DOM(Document Object Model)と略称されます.Matlabでは、xmlreadを使用してxmlファイルをDOMノードに読み込み、xmlファイルに対する操作をDOMノードに変換し、xmlwriteを使用してDOMノードをxmlファイルに書き込む.
Matlab書き込みxmlファイル
個人情報を例にとると、通常、個人の情報には名前、性別、住所、電話などが含まれており、電話は携帯電話や座席機など複数ある可能性があり、コードは以下の通りである.
xmlはDocument,Element,Nodeの3段階構造に分けられ,ElementはElementとNodeをネストすることができ,Nodeは最小のxml単位である.
なお、getDocumentElement()とcreateElement()とcreateTextNode()の3つの方法は、それぞれDocument、Element、Nodeを取得する3つの方法である.さらに、appendChild()の前の要素がxml要素の構造を決定し、最後にxmlwriteメソッドでxmlファイルに書き込まれ、最終的にxmlファイルは以下のようになります.
Matlabはxmlファイルを読みます
読み取りプロセスにはxmlファイルを読み込むだけでなく、以前に記憶するinfoを解析する必要がある.xmlを例にとると、コードは以下の通りです.
まずxmlreadでxmlファイル全体を読み込み、その後getElementsByTagName(‘name’)でnameノードを見つけ、getNodeByTagNameメソッドがないことに注意し、getElementsByTagName()で得られるのはNodeList配列であり、xmlはノードの再名を許可し、複数のnameノードがある可能性があるため、item(0)で最初のnameノードを得る.さらにgetTextContent()メソッドでnameノードの内容を出力する.
同様にgetElementsByTagName(‘phone’).item(0)はphoneノードを見つけ、ここでphoneはmobilephoneとlandlineの2つのサブノードを含み、テストによりphoneノードitem(0)、item(2)とitem(4)はいずれも#textのノードであり、item(1)とitem(3)はmobilephoneとlandlineの2つのノードを表し、getNodeName()とgetTextContent()でそれぞれノードの名前と内容が得られ、結果は以下の通りである.
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の3段階構造に分けられ,ElementはElementとNodeをネストすることができ,Nodeは最小のxml単位である.
なお、getDocumentElement()とcreateElement()とcreateTextNode()の3つの方法は、それぞれDocument、Element、Nodeを取得する3つの方法である.さらに、appendChild()の前の要素がxml要素の構造を決定し、最後にxmlwriteメソッドでxmlファイルに書き込まれ、最終的にxmlファイルは以下のようになります.
<info>
<name>Jackname>
<gender>malegender>
<address>Beijingaddress>
<phone>
<mobilephone>123456mobilephone>
<landline>012345landline>
phone>
info>
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ノードを見つけ、getNodeByTagNameメソッドがないことに注意し、getElementsByTagName()で得られるのはNodeList配列であり、xmlはノードの再名を許可し、複数のnameノードがある可能性があるため、item(0)で最初のnameノードを得る.さらにgetTextContent()メソッドでnameノードの内容を出力する.
同様にgetElementsByTagName(‘phone’).item(0)はphoneノードを見つけ、ここでphoneはmobilephoneとlandlineの2つのサブノードを含み、テストによりphoneノードitem(0)、item(2)とitem(4)はいずれも#textのノードであり、item(1)とitem(3)はmobilephoneとlandlineの2つのノードを表し、getNodeName()とgetTextContent()でそれぞれノードの名前と内容が得られ、結果は以下の通りである.
name:Jack
mobilephone:123456
landline:012345