matlab.io.xml.dom.EntityResolver class

Пакет: matlab.io.xml.dom

Абстрактный базовый класс для разрешителей сущностей

Описание

matlab.io.xml.dom.EntityResolver - абстрактный базовый класс для производных разрешителей сущностей, разрешающих ссылки на сущности, с которыми сталкивается анализатор при анализе XML- файл или строки.

The matlab.io.xml.dom.EntityResolver класс является handle класс.

Атрибуты класса

Abstract
true
ConstructOnLoad
true
HandleCompatible
true

Для получения информации об атрибутах класса см. раздел «Атрибуты класса».

Методы

расширить все

Примеры

свернуть все

Этот пример создает решатель сущности, конфигурирует анализатор для использования решателя и анализирует XML- файл, содержащее ссылку на сущность.

Если путь к файлу, содержащему сущность, задан относительно расположения основного XML-документа, анализатор может использовать решатель сущности по умолчанию для разрешения пути. В этом случае вы не должны определять свой собственный решатель. Чтобы убедиться, что для этого примера требуется решатель, в примере сохранен файл, содержащий сущность и основной XML-файл, в разных папках на одном уровне.

В подпапке chapters текущей папки, создайте файл chapter.xml который содержит эту разметку для главы:

<?xml version="1.0" encoding="UTF-8"?>
<chapter><title color="red">Introduction</title></chapter>

В подпапке books то есть на том же уровне, что и chapters папка, создайте файл books.xml который содержит эту разметку для книги:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book [
<!ENTITY chapter SYSTEM "chapters/chapter.xml">
]>
<book>
    &chapter;
</book>

book.xml содержит ссылку на сущность &chapter; и объявляет, что ресурс для сущности chapters/chapter.xml.

Задайте подкласс абстрактного класса matlab.io.xml.dom.EntityResolver и назовите его BookEntityResolver. Сохраните BookEntityResolver.m в папке, содержащей chapters и books папка.

classdef BookEntityResolver < matlab.io.xml.dom.EntityResolver
    
    properties
        BaseDir
    end
    
    methods
        
        function obj =  BookEntityResolver(baseDir)
            obj@matlab.io.xml.dom.EntityResolver()
            obj.BaseDir = baseDir;
        end
        
        function res = resolveEntity(obj,ri)
            import matlab.io.xml.dom.ResourceIdentifierType
            if getResourceIdentifierType(ri) == ResourceIdentifierType.ExternalEntity
                res = fullfile(obj.BaseDir, ri.SystemID);
            end
        end
    end
    
end

Создайте решатель сущности как образец BookEntityResolver класс.

import matlab.io.xml.dom.*

resolver = BookEntityResolver(pwd);

Создайте анализатор и сконфигурируйте его, чтобы использовать разрешитель.

p = Parser();
p.Configuration.EntityResolver = resolver;

Проанализируйте файл book.xml в matlab.io.xml.dom.Document объект.

filePath = "books/book.xml";
domDoc = parseFile(p,filePath);

Чтобы увидеть, что chapter сущность был разрешаема, найти chapter узел элемента в документе.

nl = getElementsByTagName(domDoc,"chapter");
ch = node(nl,1)
ch = 
  Element with properties:

          TagName: 'chapter'
    HasAttributes: 0
      TextContent: 'Introduction'
         Children: [1×1 matlab.io.xml.dom.Element]

Введенный в R2021a