zoukankan      html  css  js  c++  java
  • matlab xml文件交互

    xml文件以文档对象模型表示,简称DOM(Document Object Model)。在Matlab中,使用xmlread读取xml文件成DOM节点,对xml文件的操作转化成对DOM节点的操作,使用xmlwrite把DOM节点写入到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三级结构,Element可以嵌套Element和Node,Node是最小的xml单位。

    注意其中getDocumentElement(), createElement()和createTextNode()三个方法,分别是获取Document, Element和Node的三个方法。此外注意appendChild()前面的元素决定了xml元素的结构,最后通过xmlwrite方法写入到xml文件中,最终xml文件如下。

    <?xml version="1.0" encoding="utf-8"?>
    <info>
    <name>Jack</name>
    <gender>male</gender>
    <address>Beijing</address>
    <phone>
    <mobilephone>123456</mobilephone>
    <landline>012345</landline>
    </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两个子节点,通过测试发现phone节点item(0),item(2)和item(4)都是#text的节点,item(1)和item(3)分别代表mobilephone和landline两个节点,通过getNodeName()和getTextContent()分别得到节点的名称和内容,结果如下。

    name:Jack
    mobilephone:123456
    landline:012345
    ---------------------
    作者:chensonglu
    来源:CSDN
    原文:https://blog.csdn.net/lkj345/article/details/52763790
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    bzoj 1927: [Sdoi2010]星际竞速
    bzoj 1926: [Sdoi2010]粟粟的书架
    bzoj 1923: [Sdoi2010]外星千足虫
    bzoj 1922: [Sdoi2010]大陆争霸
    bzoj 1911: [Apio2010]特别行动队
    bzoj 1878: [SDOI2009]HH的项链
    bzoj 1877: [SDOI2009]晨跑
    bzoj 1856: [Scoi2010]字符串
    bzoj 1854: [Scoi2010]游戏
    python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数
  • 原文地址:https://www.cnblogs.com/hjj-fighting/p/10300120.html
Copyright © 2011-2022 走看看