2011-06-28 44 views
17

我需要能夠引用名爲HTML的實體,如•而不是Unicode文件中的Unicode替代•。我可以控制XML文檔的某些部分,例如定義DOCTYPE,但是在實際的XML中查找和替換不是一種選擇。通過包含XHTML過渡DOCTYPE,我可以得到 &等一些元素,但是我需要手動定義更多元素。我該怎麼做呢?如何在有效的XML文檔中定義HTML實體引用?

- 編輯 -

感謝Jim的答案,這裏是我結束了。這是偉大的,因爲我可以利用XHTML過渡性實體,也可以增加自己:

<!DOCTYPE 
    html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    [ 
     <!ENTITY bull "&#8226;"> 
     <!ENTITY ldquo "&#8220;"> 
     <!ENTITY rdquo "&#8221;"> 
     ... etc ... 
    ] 
> 
+2

如果您最終使用了大量的實體聲明,請考慮將它們放在單獨的文件中,然後使用參數實體來引用它們。 –

回答

13

如果你可以修改XML以有內部DTD可以定義實體有:

<!DOCTYPE yourRootElement [ 
    <!ENTITY bull "&#8226;"> 
    .... 
]> 
+0

太棒了,謝謝! – mattmc3

+0

這是神奇的!它也可以用來構建Android清單文件,可以很容易地創建一個模板,而不會在包名或其他類似的地方犯任何錯誤...... – Tonithy

3

我不是某類,但我認爲XHTML DTD的應該給你相當多的實體(253):

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML

另外在W3規範,有一個提額外的DTD的特殊字符等 http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_dtd_xhtml_character_entities

但是,我一直沒能找到一個特殊字符DTD的實現示例。


編輯由DevNull

這裏是實體DTD模塊中的一個的極其通用的示例性實現。要實現,只需要添加一個指向模塊的參數實體。

<?xml version="1.0"?> 
<!DOCTYPE test [ 
<!ELEMENT test (#PCDATA)> 
<!ENTITY % xhtml-special SYSTEM "xhtml-special.ent"> 
%xhtml-special; 
]> 
<test>Here is a left double quote: &ldquo;</test> 
+0

我添加了一個實現的例子。我希望你不介意。如果這不是你的意思,請隨時刪除我的編輯。 –

+0

很酷,很好的@DevNull不知道你可以做到這一點。那麼「test(#PCDATA)」是否告訴解析器「test」是Parsed Character Data? –

+0

這意味着test元素可以包含「解析的字符數據」(純文本)。 –