Mixed content not working for me

David Megginson ak117 at freenet.carleton.ca
Wed Dec 10 19:28:05 GMT 1997

Russell East writes:

 > How come the following doesn't work?
 >   <!ELEMENT   a   (#PCDATA|(a*)) >
 > I basically want my element a to either form an hierarchy
 > *or* have some text data.
 > But it seems I'm forced to have
 >   <!ELEMENT   a   (#PCDATA|a)* >

XML bans this type of mixed content because it has been causing
trouble in full SGML for over a decade.  The problem comes with
something like this:



After an SGML parser reads the opening <a> tag, it doesn't know
whether the element will contain #PCDATA or subelements.  The first
character it reads is a linefeed -- that's character data, so the
parser assumes that it is reading #PCDATA; when the parser finds the
<a> tag a few characters later it throws an error.

You need to do two things:

1) submit a bug report to Microsoft; and

2) create a new subelement to hold the text:

  <!ELEMENT a (text|a)>
  <!ELEMENT text (#PCDATA)>

  Now you can have

  <text>This is some text</text>


  <a>This is a subelement</a>

All the best,


David Megginson                 ak117 at freenet.carleton.ca
Microstar Software Ltd.         dmeggins at microstar.com

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)

More information about the Xml-dev mailing list