В этом примере создается распознаватель объектов, настраивается синтаксический анализатор для использования распознавателя и выполняется синтаксический анализ XML-файла, содержащего ссылку на объект.
Если путь к файлу, содержащему сущность, указан относительно расположения основного XML-документа, синтаксический анализатор может использовать средство разрешения сущностей по умолчанию для разрешения пути. В этом случае нет необходимости определять собственный распознаватель. Чтобы убедиться, что для этого примера требуется распознаватель, в примере файл, содержащий сущность и основной XML-файл, сохраняется в разных папках на одном уровне.
Во вложенной папке chapters текущей папки, создайте файл chapter.xml которая содержит эту разметку для главы:
Во вложенной папке 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 класс.
Создайте синтаксический анализатор и настройте его для использования распознавателя.
Анализ файла book.xml в matlab.io.xml.dom.Document объект.
Чтобы увидеть, что chapter сущность разрешена, найдите chapter узел элемента в документе.
ch =
Element with properties:
TagName: 'chapter'
HasAttributes: 0
TextContent: 'Introduction'
Children: [1×1 matlab.io.xml.dom.Element]