[Mono-dev] monodocer formatting problem

Atsushi Eno atsushi at ximian.com
Thu Aug 10 23:06:43 EDT 2006


hey,

Some guys asked me to have a look at monodocer XML formatting problem
that the latest XmlTextWriter formats xml differently than before.

Here I list what I analyzed. Any corrections are welcome:

- Basically, the latest XmlTextWriter's behavior is what exactly matches
  .net's, so it is rather problems in existing documents (if you
  disagree file a bug please). MSDN document tells that it invalidates
  indentation when it found a mixed content, but it is simply wrong
  (it cannot explain why an empty element is formatted as <foo>\n</foo>
  while a simple text element is formatted as <foo>string</foo>).

- If there are text contents (texts, CDATA and whitespaces), the
  container element does not indent its contents after it found a
  content mix. But since XmlTextWriter is not the God, it does not
  foresee whether the content is mixed or not when they write first 
  child.

- An applied example is what happens with whitespaces. If there are
  extra whitespaces between <foo> and <bar> (i.e. like <foo>\n<bar>),
  *the entire element foo* is not indented. That is, until </foo>
  there will be no generated whitespaces.

  (At first I thought that the "problem" lies in the entire whitespace
  thingy, but as the above implies, it is just one example case.)

- Existing documents need formatting, so we can't just disable
  indentation.

- There is no way to reproduce exactly the same results from
  the correct XmlTextWriter.

Thus, the solution is only in two ways:

- enbrace inevitable diffs
- add old wrong XmlTextWriter to be used in monodocer to replace 
  correct XmlTextWriter.
  Grab XmlTextWriter.cs and XmlTextWriterOpenElement.cs from
  branches/mono-1-1-16/mcs/class/System.XML/System.Xml.

Which would be better?

Atsushi Eno





More information about the Mono-devel-list mailing list