ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

xmlread

XML ドキュメントを読み取って、ドキュメント オブジェクト モデル ノードを返す

構文

DOMnode = xmlread(filename)

説明

DOMnode = xmlread(filename) は、指定された XML ファイルを読み取って、そのドキュメントを表すドキュメント オブジェクト モデル ノードを返します。

入力引数

filename

ファイル名。ローカル ファイル名または URL を含む、文字ベクトルまたは string スカラーとして指定します。

出力引数

DOMnode

World Wide Web consortium で規定された ドキュメント オブジェクト モデル。詳細については、XML ドキュメント オブジェクト モデル (DOM) とはを参照してください。

XML ファイルのルート要素には、ときには xsi:noNamespaceSchemaLocation 属性が含まれることがあります。この属性の値は、優先されるスキーマ ファイルの名前です。getAttribute メソッドを呼び出して、この値を取得します。

xDoc = xmlread(fullfile(matlabroot,'toolbox',...
               'matlab','general','info.xml'));

xRoot = xDoc.getDocumentElement;
schema = char(xRoot.getAttribute('xsi:noNamespaceSchemaLocation'))

このコードは、以下の出力を返します。

schema =
https://www.mathworks.com/namespace/info/v1/info.xsd

XML ファイルのデータを解析し、フィールド NameAttributesData、および Children をもつ MATLAB® 構造体配列に格納する関数を作成します。

function theStruct = parseXML(filename)
% PARSEXML Convert XML file to a MATLAB structure.
try
   tree = xmlread(filename);
catch
   error('Failed to read XML file %s.',filename);
end

% Recurse over child nodes. This could run into problems 
% with very deeply nested trees.
try
   theStruct = parseChildNodes(tree);
catch
   error('Unable to parse XML file %s.',filename);
end


% ----- Local function PARSECHILDNODES -----
function children = parseChildNodes(theNode)
% Recurse over node children.
children = [];
if theNode.hasChildNodes
   childNodes = theNode.getChildNodes;
   numChildNodes = childNodes.getLength;
   allocCell = cell(1, numChildNodes);

   children = struct(             ...
      'Name', allocCell, 'Attributes', allocCell,    ...
      'Data', allocCell, 'Children', allocCell);

    for count = 1:numChildNodes
        theChild = childNodes.item(count-1);
        children(count) = makeStructFromNode(theChild);
    end
end

% ----- Local function MAKESTRUCTFROMNODE -----
function nodeStruct = makeStructFromNode(theNode)
% Create structure of node info.

nodeStruct = struct(                        ...
   'Name', char(theNode.getNodeName),       ...
   'Attributes', parseAttributes(theNode),  ...
   'Data', '',                              ...
   'Children', parseChildNodes(theNode));

if any(strcmp(methods(theNode), 'getData'))
   nodeStruct.Data = char(theNode.getData); 
else
   nodeStruct.Data = '';
end

% ----- Local function PARSEATTRIBUTES -----
function attributes = parseAttributes(theNode)
% Create attributes structure.

attributes = [];
if theNode.hasAttributes
   theAttributes = theNode.getAttributes;
   numAttributes = theAttributes.getLength;
   allocCell = cell(1, numAttributes);
   attributes = struct('Name', allocCell, 'Value', ...
                       allocCell);

   for count = 1:numAttributes
      attrib = theAttributes.item(count-1);
      attributes(count).Name = char(attrib.getName);
      attributes(count).Value = char(attrib.getValue);
   end
end

ヒント

適切に解析されたドキュメントの表示は、[#document: null] です。以下に例を示します。

xDoc = xmlread('info.xml')
は、以下を返します。

xDoc =
[#document: null]

R2006a より前に導入