Можно импортировать XML-файл в узел документа Объектной модели документа (DOM) при помощи matlab.io.xml.dom.Parser
возразите или xmlread
функция.
matlab.io.xml.dom.Parser
класс принадлежит MATLAB® API для обработки XML (MAXP). Когда вы используете Parser
MAXP возразите, чтобы считать XML-файл, получившийся узел документа DOM представлен как
matlab.io.xml.dom.Document
объект. Для списка классов, которые можно использовать, чтобы работать с Document
возразите, смотрите matlab.io.xml.dom
. Вам не нужно программное обеспечение Java®, чтобы использовать классы MAXP.
Работать с объектом узла документа DOM, созданным xmlread
, необходимо использовать API Java для обработки XML (JAXP). Для списка методов JAXP и свойств, смотрите org.w3c.dom
описание пакета в https://docs.oracle.com/javase/7/docs/api
.
В Объектной модели документа каждый элемент в XML-файле соответствует узлу. Свойства и методы, которые вы используете, чтобы создать и получить доступ к узлам, следуйте нормам, установленным консорциумом Всемирной паутины.
Например, рассмотрите этот демонстрационный 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
элементом является родительский элемент listitem
дочерние узлы элемента. productinfo
элементом является корневой узел элемента.
Text nodes — Содержите значения, сопоставленные с узлами элемента. Каждый текстовый узел является дочерним элементом узла элемента. Например, Import Wizard
текстовый узел является дочерним элементом первого label
узел элемента.
Attribute nodes — Содержите имя и пары значения, сопоставленные с узлом элемента. Например, в первом label
узел элемента, color
имя атрибута и blue
его значение. Узлы атрибута не являются родительскими элементами или дочерними элементами никаких узлов.
Comment nodes — Включайте дополнительный текст в файл в форму <!--Sample comment-->
.
Document nodes — Соответствуйте целому файлу. Используйте методы на узле документа, чтобы создать новый элемент, текст, атрибут или узлы комментария.
Этот пример использует matlab.io.xml.dom.Parser
возразите, чтобы считать info.xml
файл в matlab.io.xml.dom.Document
узел. Файл содержит несколько listitem
элементы. Каждый listitem
элемент содержит label
и callback
элемент. Пример использует методы MAXP, чтобы найти текстовое содержимое callback
элемент, который соответствует label
это имеет текстовое содержимое Plot Tools
.
Считайте файл в Document
объект.
infoFile = fullfile(matlabroot,'toolbox/matlab/general/info.xml'); infoLabel = 'Plot Tools'; infoCbk = ''; itemFound = false; import matlab.io.xml.dom.* xDoc = parseFile(Parser,infoFile);
Найдите весь listitem
элементы путем вызова getElementsByTagName
метод, который возвращает matlab.io.xml.dom.NodeList
объект.
allListItems = getElementsByTagName(xDoc,'listitem');
Для каждого listitem
элемент, сравните текст label
элемент к Plot Tools
. Когда вы определяете местоположение правильной метки, получаете callback
текст. Получить доступ к элементу в NodeList
объект, используйте node
метод, который использует индексацию на основе одну. В качестве альтернативы можно использовать item
метод, который использует основанную на нуле индексацию.
length = allListItems.Length; for i=1:length thisListItem = node(allListItems,i); childNode = getFirstChild(thisListItem); while ~isempty(childNode) %Filter out text, comments, and processing instructions. if isa(childNode,'matlab.io.xml.dom.Element') %Assume that each element has a single Text child childText = getData(getFirstChild(childNode)); switch getTagName(childNode) case 'label' itemFound = strcmp(childText,infoLabel); case 'callback' infoCbk = childText; end end childNode = getNextSibling(childNode); end if itemFound break else infoCbk = ''; end end
Отобразите результат.
fprintf('Item "%s" has a callback of "%s".\n', infoLabel,infoCbk);
Item "Plot Tools" has a callback of "figure; plottools".
xmlread
Этот пример использует xmlread
считать info.xml
файл в узел документа DOM и API Java для методов обработки XML, чтобы найти текстовое содержимое callback
элемент, который соответствует label
это имеет текстовое содержимое Plot Tools
.
infoFile = fullfile(matlabroot,'toolbox/matlab/general/info.xml'); infoLabel = 'Plot Tools'; infoCbk = ''; itemFound = false; xDoc = xmlread(infoFile); allListItems = getElementsByTagName(xDoc,'listitem'); %The item list index is zero-based. length = allListItems.getLength-1; for i=0:length thisListItem = item(allListItems,i); childNode = getFirstChild(thisListItem); while ~isempty(childNode) %Filter out text, comments, and processing instructions. if childNode.getNodeType == childNode.ELEMENT_NODE %Assume that each element has a single org.w3c.dom.Text child childText = char(childNode.getFirstChild.getData); switch char(childNode.getTagName) case 'label' itemFound = strcmp(childText,infoLabel); case 'callback' infoCbk = childText; end end childNode = getNextSibling(childNode); end if itemFound break else infoCbk = ''; end end fprintf('Item "%s" has a callback of "%s".\n', infoLabel,infoCbk);
Item "Plot Tools" has a callback of "figure; plottools".
matlab.io.xml.dom.Document
| xmlread