exponenta event banner

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

XML-файл можно импортировать в узел документа объектной модели документа (DOM) с помощью matlab.io.xml.dom.Parser объект или xmlread функция.

matlab.io.xml.dom.Parser класс принадлежит API MATLAB ® для обработки XML (MAXP). При использовании MAXPParser объект для чтения XML-файла, результирующий узел документа DOM представлен как matlab.io.xml.dom.Document объект. Список классов, которые можно использовать для работы с Document объект, см. matlab.io.xml.dom. Для использования классов MAXP программное обеспечение Java ® не требуется.

Для работы с объектом узла документа DOM, созданным xmlread, необходимо использовать Java API для обработки XML (JAXP). Список методов и свойств JAXP см. в разделе org.w3c.dom описание пакета по адресу https://docs.oracle.com/javase/7/docs/api.

Объектная модель XML-документа

В объектной модели документа каждый элемент 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 дочерние узлы элемента. productinfo элемент является корневым узлом элемента.

  • Текстовые узлы - содержат значения, связанные с узлами элементов. Каждый текстовый узел является дочерним для узла элемента. Например, Import Wizard текстовый узел является дочерним для первого label узел элемента.

  • Узлы атрибутов - содержат пары имен и значений, связанные с узлом элемента. Например, в первом label узел элемента, color является именем атрибута и blue - его ценность. Узлы атрибутов не являются родительскими или дочерними узлами.

  • Узлы комментариев - включить дополнительный текст в файл в форме <!--Sample comment-->.

  • Узлы документа - соответствуют всему файлу. Используйте методы узла документа для создания новых узлов элементов, текста, атрибутов или комментариев.

Чтение 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 и 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".

См. также

|

Связанные темы

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