Импортируйте XML-файл в объектную модель документа

Можно импортировать 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-файле соответствует узлу. Свойства и методы, которые вы используете, чтобы создать и получить доступ к узлам, следуйте нормам, установленным консорциумом Всемирной паутины.

Например, рассмотрите этот демонстрационный 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 — Соответствуйте целому файлу. Используйте методы на узле документа, чтобы создать новый элемент, текст, атрибут или узлы комментария.

Считайте XML-файл Используя синтаксический анализатор MAXP

Этот пример использует 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".

Считайте XML-файл Используя 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".

Смотрите также

|

Похожие темы

Внешние веб-сайты