이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

xmlread

XML 문서 읽기 및 문서 객체 모델 노드 반환

구문

DOMnode = xmlread(filename)

설명

DOMnode = xmlread(filename)은 지정한 XML 파일을 읽어 들이고 문서를 표현하는 문서 객체 모델 노드를 반환합니다.

입력 인수

filename

파일 이름으로, 로컬 파일의 이름 또는 URL을 포함하는 문자형 벡터 또는 string형 스칼라로 지정됩니다.

출력 인수

DOMnode

World Wide Web Consortium에서 정의한 문서 객체 모델(DOM) 노드입니다. 자세한 내용은 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 파일의 데이터를 Name, Attributes, DataChildren 필드를 포함하는 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 이전에 개발됨