21

I need to be able to reference named HTML entities like • instead of the Unicode alternative • in an XML document. I have control over some parts of the XML document, such as defining the DOCTYPE, but doing a find-and-replace in the actual XML is not an option. I can get some elements like   and & by including the XHTML transitional DOCTYPE, but I need to define more manually. How do I do this?

-- EDIT --

Thanks to Jim's answer, here's what I ended up with. This is great because I can utilize the XHTML transitional entities, and also add my own:

<!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 ...
   ]
>
mattmc3
  • 17,595
  • 7
  • 83
  • 103
  • 2
    If you end up using a lot of entity declarations, consider putting them in a separate file and then using a parameter entity to reference them. – Daniel Haley Jun 28 '11 at 17:25

2 Answers2

18

If you can modify the the XML to include an inline DTD you can define the entities there:

<!DOCTYPE yourRootElement [
    <!ENTITY bull "&#8226;">
    ....
]>
Jim Garrison
  • 85,615
  • 20
  • 155
  • 190
  • This is magic! It can be used to build android manifest files as well, makes it easy to create a template without making any mistakes on the package name or the like... – Tonithy May 09 '13 at 01:42
4

I'm not cetain, but I think the XHTML DTD's should give you quite a few entities (253):

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

Also in the w3 spec, there is a mention of additional DTD's for special characters etc. http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_dtd_xhtml_character_entities

However I haven't been able to find an implementation example of the special character DTDs.


Edit by DevNull

Here is an extremely generic example implementation of one of the entity DTD modules. To implement, you only need to add a parameter entity pointing to the module.

<?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>
Daniel Haley
  • 51,389
  • 6
  • 69
  • 95
Alex KeySmith
  • 16,657
  • 11
  • 74
  • 152