DOMDocument :: load (): префикс по умолчанию для пространства имен не найден в Entity - PullRequest
0 голосов
/ 30 апреля 2020

Я анализирую XML с PHP DOMDocument. Это мой код:

$doc = new DOMDocument;
$doc->resolveExternals = true;
$doc->substituteEntities = true;
$doc->load('../poems_xml/'.$pid.'.xml');

$xsl = new DOMDocument;
$xsl->load('../xslt/title.xsl');
$proc = new XSLTProcessor;
$proc->importStylesheet($xsl);
$ptitle = $proc->transformToXML($doc);

В начале моего файла объявлен файл сущностей. xml:

<?xml version="1.0" encoding="utf-8"?>
<?oxygen RNGSchema="../dtd/dps.rng" type="xml"?>
<?xml-stylesheet href="../dtd/dps.css" type="text/css"?>
<!DOCTYPE TEI SYSTEM "../dtd/entities.ent">
[...]

И файл сущностей выглядит следующим образом:

[...]
<!ENTITY d1_AytR_002 "<rs key='d1_AytR_002'>d1_AytR_002</rs>">
[...]

В моем. xml Я использую эти сущности так:

...&d1_AytR_002;...

Теперь все идет хорошо с точки зрения разбора файла и его преобразования через xslt и css файлы, кроме сущностей. Их просто игнорируют. Включив флаг php_error_log, я получаю следующее:

Notice: DOMDocument::load(): Namespace default prefix was not found in Entity, line: 1 in index.php on line 28

(в строке 28 index.php находится инструкция load('../poems_xml/'.$pid.'.xml')). Может кто-нибудь пролить свет на то, что я должен проверить / добавить в отношении моих сущностей?

Я использую PHP 5.6.40.

1 Ответ

0 голосов
/ 30 апреля 2020

Обходной путь (и возможное постоянное решение) - это добавление пространства имен к каждому из <!ENTITY> s, например:

<!ENTITY d1_AytR_002 "<rs xmlns="http://www.tei-c.org/ns/1.0" key='d1_AytR_002'>d1_AytR_002</rs>">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...