我正在尝试将 ENTITY 放在externaL DTD 文件中,但在 XML 中未显示 ENTITY 的值何时解析。
但是当我将 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 位于同一个文件夹中
答案 0 :(得分:1)
我不确定您使用什么来解析XML,但我知道如果您使用文件扩展名“.dtd”,Xerces将抛出有关<info>
未被声明的错误。
尝试将“Note.dtd”更改为“Note.ent”。
我用你的示例文件做了这个,错误就消失了。此外,我能够在原始info.xml上使用Saxon进行身份转换,并且实体引用得到了解决而没有错误。
答案 1 :(得分:0)
<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>