【问题标题】:entity in external xml dtd外部 xml dtd 中的实体
【发布时间】:2020-09-12 02:23:20
【问题描述】:

我正在尝试将 ENTITY 放在外部 DTD 文件中,但它没有在 XML 中显示 ENTITY 的值解析时。

但是当我将 XMLDTD 组合在下面的一个文件中时,它的工作是我的 XMLDTD 代码强>

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.xmlNote.dtd 在同一个文件夹中

【问题讨论】:

    标签: html xml dtd-parsing dtd


    【解决方案1】:

    我不确定您使用什么来解析 XML,但我知道如果您使用文件扩展名“.dtd”,Xerces 会抛出关于未声明 &lt;info&gt; 的错误。

    尝试将“Note.dtd”更改为“Note.ent”。

    我对您的示例文件执行了此操作,并且错误消失了。此外,我能够在您的原始 info.xml 上使用 Saxon 进行身份转换,并且实体引用已正确解析。

    【讨论】:

    • 目前我尝试在浏览器 firefox 和 safari 中直接打开 XML,但在两个浏览器中都出现错误。我的主要目标是使用json-lib.sourceforge.net 提供的 JSON-LIB 将 XML 转换为 json
    • @AnupSingh - Firefox(和 safari)不会加载外部 DTD 或外部实体。 developer.mozilla.org/en/…
    • 啊!.. 运气不好.. 感谢您的回复.. 您能否建议我“将 XML 转换为解析外部实体引用的 JSON 的首选方法是什么”。
    • @AnupSingh - 抱歉,我对 JSON 没有任何经验。不过,这将是一个很好的新问题。 :-)
    【解决方案2】:

    <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>

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 2014-10-20
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多