ドキュメンテーション

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

xmlread

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

構文

DOMnode = xmlread(filename)

説明

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

入力引数

filename

ローカル ファイル名または URL を指定する単一引用符に囲まれた文字列。

出力引数

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 =
http://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]

参考

|

この情報は役に立ちましたか?