Чтобы считать XML-файл из вашего локального диска или из URL, используйте xmlread
функция. xmlread
возвращает содержимое файла в узле Объектной модели документа (DOM). Для получения дополнительной информации см.:
В Объектной модели документа каждый элемент в XML-файле соответствует узлу. Свойства и методы для узлов DOM (то есть, путь вы создаете и узлы доступа) следуют нормам, установленным консорциумом Всемирной паутины.
Например, рассмотрите этот демонстрационный XML-файл:
<productinfo> <!-- This is a sample info.xml file. --> <list> <listitem> <label color="blue">Import Wizard</label> <callback>uiimport</callback> <icon>ApplicationIcon.GENERIC_GUI</icon> </listitem> <listitem> <label color="red">Profiler</label> <callback>profile viewer</callback> <icon>ApplicationIcon.PROFILER</icon> </listitem> </list> </productinfo>
Информация в картах файлов к следующим типам узлов в DOM:
Узлы элемента — Соответствуют именам тега. В демонстрационном info.xml
файл, эти теги соответствуют узлам элемента:
productinfo
list
listitem
label
callback
icon
В этом случае, list
элементом является parent listitem
элемент узлы child. productinfo
элементом является узел элемента root.
Text nodes — Содержит значения, сопоставленные с узлами элемента. Каждый текстовый узел является дочерним элементом узла элемента. Например, Import Wizard
текстовый узел является дочерним элементом первого label
узел элемента.
Attribute nodes — Содержит имя и пары значения, сопоставленные с узлом элемента. Например, в первом label
узел элемента, color
имя атрибута и blue
его значение. Узлы атрибута не являются родительскими элементами или дочерними элементами никаких узлов.
Comment nodes — Включает дополнительный текст в файл, в форму <!--Sample comment-->
.
Document nodes — Соответствует целому файлу. Используйте методы на узле документа, чтобы создать новый элемент, текст, атрибут или узлы комментария.
Для полного списка методов и свойств узлов DOM, смотрите org.w3c.dom
описание пакета в https://docs.oracle.com/javase/7/docs/api
.
Полный
файл содержит несколько matlabroot
/toolbox/matlab/general/info.xmllistitem
элементы, такие как:
<listitem> <label>Import Wizard</label> <callback>uiimport</callback> <icon>ApplicationIcon.GENERIC_GUI</icon> </listitem>
Один из label
элементы имеют дочерний текст Plot Tools
. Предположим, что вы хотите найти текст для callback
элемент в том же listitem
. Выполните эти шаги:
Инициализируйте свои переменные и вызовите xmlread
получить узел документа:
findLabel = 'Plot Tools'; findCbk = ''; xDoc = xmlread(fullfile(matlabroot, ... 'toolbox','matlab','general','info.xml'));
Найдите весь listitem
элементы. getElementsByTagName
метод возвращает глубокий список, который содержит информацию о дочерних узлах:
allListitems = xDoc.getElementsByTagName('listitem');
Примечание
Списки, возвращенные методами DOM, используют основанную на нуле индексацию.
Для каждого listitem
, сравните текст для label
элемент к тексту вы хотите найти. Когда вы определяете местоположение правильного label
, получите callback
текст:
for k = 0:allListitems.getLength-1 thisListitem = allListitems.item(k); % Get the label element. In this file, each % listitem contains only one label. thisList = thisListitem.getElementsByTagName('label'); thisElement = thisList.item(0); % Check whether this is the label you want. % The text is in the first child node. if strcmp(thisElement.getFirstChild.getData, findLabel) thisList = thisListitem.getElementsByTagName('callback'); thisElement = thisList.item(0); findCbk = char(thisElement.getFirstChild.getData); break; end end
Отобразите конечные результаты:
if ~isempty(findCbk) msg = sprintf('Item "%s" has a callback of "%s."',... findLabel, findCbk); else msg = sprintf('Did not find the "%s" item.', findLabel); end disp(msg);
Для дополнительного примера, который создает массив структур, чтобы хранить данные от XML-файла, смотрите xmlread
страница ссылки на функцию.