Сущность во внешнем xml dtd
Я пытаюсь поместить ENTITY в внешний DTD- файл, но в нем не отображаются значения ENTITY в XML при его разборе.
Но это работает, когда я объединяю XML и DTD в одном файле ниже, это мой код для XML и DTD
info.xml
<!DOCTYPE info SYSTEM "./Note.dtd"> <info>
<info>
<company>&company_info;</company>
<privacy_policy>&privacy_policy;</privacy_policy> </info>
</info>
Note.dtd
<!ENTITY company_info "<name>Test Company</name><location>Berlin</location><phone>1800-000-000</phone>">
<!ENTITY privacy_policy "Lorem ipsum dolor sit amet, consectetur adipisicing elit, .">
info.xml и Note.dtd находятся в одной папке
1 ответ
Я не уверен, что вы используете для разбора XML, но я знаю, что Xerces выдаст ошибки о <info>
не объявляется, если вы используете расширение файла ".dtd".
Попробуйте изменить "Note.dtd" на "Note.ent".
Я сделал это с вашими примерами файлов, и ошибки исчезли. Кроме того, я смог выполнить преобразование идентичности, используя Saxon в вашем исходном файле info.xml, и ссылки на сущности были разрешены без ошибок.
<p>
i had the same problem..just use php instead
<?php
libxml_disable_entity_loader(false);
// code injection from the client side
$file='<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE login SYSTEM "http://localhost/e.ent">
<login><user>&name;</user><pass>password</pass></login>';
//
$dom=new DOMDocument();
$dom->loadXML($file,LIBXML_NOENT | LIBXML_DTDLOAD);
$element=$dom->getElementsByTagName('user')[0];
echo $element->nodeValue;
?></p>