Этот пример создает преобразователь сущности, конфигурирует синтаксический анализатор, чтобы использовать преобразователь и анализирует 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]