exponenta event banner

matlab.io.xml.dom.EntityResolver класс

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

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

Описание

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

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