matlab 修改xml文件的属性

来源:互联网 发布:影像医疗软件代理 编辑:程序博客网 时间:2024/06/01 07:27


本人不懂xml,经过别人帮助写出下面的程序,能用,有的地方可能我注释的不对

假设这是我们要修改的第一个xml文件,这里我们把<pose>的值 Unspecified  改成 <filename>值n02109961_1351的前9个字符n02109961

即  把Unspecified 改成n02109961

clc;
clear;  
path = '/home/zc/py/data/VOCdevkit2007/VOC2007/Annotations';                %读取路径
path2 = '/home/zc/py/data/VOCdevkit2007/VOC2007/Annotations2';             %保存路径
str1 = strcat(path,'/','*.xml');                     % 文件夹下的所有xml 文件
dirs = dir(str1);
n = size(dirs);      %xml文件总数
for m = 1:n
    name = dirs(m).name;   %xml文件名
    str2 = [path,'/',name];
    str3 = [path2,'/',name];
    xmlDoc = xmlread(str2);   % 读取文件
    
    %% Extract ID
    IDArray = xmlDoc.getElementsByTagName('filename');    % 将 filename 节点放入数组IDArray
    nodeContent = char(IDArray.item(0).getFirstChild.getData)    % 提取当前节点的内容,即n02109961_1351
    a =  nodeContent(1:9);         %取前九个字符   即 n02109961
    
    %% extract the FDs
    FDsArray = xmlDoc.getElementsByTagName('object');   % 将object 节点放入数组FDsArray

    for i = 0 : FDsArray.getLength-1     
        thisItem = FDsArray.item(i);   % 指向object
        childNode = thisItem.getFirstChild ;
        childNode = childNode.getNextSibling;   % 指向name
        childNode = childNode.getNextSibling;    % 指向pose
         childNodeNm = char(childNode.getTagName)        % % 当前节点的名字,即pose 
         childNodeData = char(childNode.getFirstChild.getData)   % 当前节点的内容,即Unspecified
         childNode.setTextContent(a);  % 把这个内容改成我们想要的 
    end
        xmlwrite(str3,xmlDoc);  %保存

end



0 0
原创粉丝点击