[英]How to use DTD ENTITY external reference in log4j.xml
我試圖使用外部dtd文件中的實體。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"
[<!ENTITY logHome SYSTEM "log4j-entity.dtd">]
>
log4j的-entity.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY logHome "/root/crm_test/">
我試圖在這樣的屬性值中使用實體值。
<param name="File" value="&logHome;log/info.log"/>
我得到這個錯誤:
The external entity reference "&logHome;" is not permitted in an attribute value.
我怎樣才能做到這一點?
注意:
這件事有效..
<!ENTITY logHome "/root/crm_test/">
您需要將內部子集中的實體作為參數實體,然后引用它。
更改:
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"
[<!ENTITY logHome SYSTEM "log4j-entity.dtd">]
>
至:
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" [
<!ENTITY % logHome SYSTEM "log4j-entity.dtd">
%logHome;
]>
XML規范明確禁止在屬性值中使用外部實體。 見這里: http : //www.w3.org/TR/2004/REC-xml-20040204/#forbidden
以下是禁止的,並構成致命錯誤:[...]在屬性值中引用外部實體。
所以答案是:XML不會讓你做你想做的事情。 但是,如果通過XSLT處理器運行XML並根據需要應用轉換,則可能會產生類似的效果。
這里有一些錯誤。
logHome
用於兩個不同的事物(包含聲明的外部實體,應該像Daniel Haley指出的那樣是一個參數實體)和一個內部實體,其替換文本命名一個目錄。 &logHome;
的引用&logHome;
在屬性值中,應理解為對URI為“ log4j-entity.dtd
”的資源的引用。 ?實現所需內容的最簡單方法是在內部子集中聲明logHome
實體:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" [
<!ENTITY logHome "/root/crm_test/">
]>
如果您真的希望logHome
的聲明是外部的,那么為參數實體使用不同的名稱可能不那么令人困惑:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" [
<!ENTITY % logHomeDeclaration SYSTEM "log4j-entity.dtd">
%logHomeDeclaration;
]>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.