matlab.io.xml.dom.EntityResolver class

Пакет: 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