I am sure whether this is the right mailing list for Xalan issues.
I found the line separator proccessing of org.apache.xalan.serialize.SerializerToXML  is weird.
//here are some lines of code from that class
void writeNormalizedChars(char ch[], int start, int length, boolean isCData)
          throws IOException, org.xml.sax.SAXException
    int end = start + length;
    for (int i = start; i < end; i++)
      char c = ch[i];
      if (CharInfo.S_LINEFEED == c)
        m_writer.write(m_lineSep, 0, m_lineSepLen);
If my original CDATA section has \r\n,  the output will become \r\r\n on Windows.
I think \r  should be skipped first on Windows(\n should be skipped on Mac) before writting out the normalized  line separators.
Chris Xing