Можно импортировать XML- файл в узел документа модели объекта документа (DOM) с помощью matlab.io.xml.dom.Parser объект или xmlread функция.
The 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необходимо использовать Java API для обработки XML (JAXP). Список методов и свойств JAXP см. в org.w3c.dom описание пакета в https://docs.oracle.com/javase/7/docs/api.
В модели объекта документа каждый элемент XML- файл соответствует узлу. Свойства и методы, которые вы используете для создания узлов и доступа к ним, соответствуют стандартам, установленным консорциумом World Wide Web.
Например, рассмотрим эту выборку 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 дочерние узлы элемента. The 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 и Java API для обработки 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