Andy, Grab it from the CVS let me know if it works. And thanks for helping me figure out how to solve this one.
arkin Andy Clark wrote: > > Assaf Arkin wrote: > > Keith also suggested I use System.out by default, but then I'll get > > people complaining of seeing stuff in the console instead of the output > > file. > > I don't think that people have a right to complain that they're > seeing output on the console if they never set the output to > where they want it! So I agree with Keith on this one. > > > You're prefectly right on the entity side, I'll try to get your patch in > > and update the CVS. > > Doing some more work, I added some code to enable printing of > the DOCTYPE line when serializing the DOM tree. Since the methods > for determing the public and system ids on the DocumentType node > aren't included until DOM Level 2 *and* DOM Level 2 is not a > standard, yet, I used reflection to see if the implementation > already had the appropriate methods to invoke. In this way we > don't have to just pass in null to startDTD() which always has > the effect of not printing the DOCTYPE line. > > So now that the DOCTYPE line is printing, I'm wondering why is > the serializer printing entities and notations in the internal > subset? In my sample, these are declared in the external DTD > and should not be duplicated in the internal subset. Unfortunately, > we still don't have a way of determining if entities and notations > are internal or external so I'm undecided on what the default > behavior in this case should be. Any thoughts? preferences? > > In any case, the patch for the following changes is included > below. If don't mind me making changes to your serializer code > directly, I'll go ahead and make future bug fixes straight in > CVS. Otherwise, I'll continue posting patches. Just let me know. > > Change 0: Removed debugging printlns left in code. > Change 1: Added ability to determine public & system ids > Change 2: Removed printing of entities and notation decls > in the internal subset. > > // BEGIN Patch > Index: src/org/apache/xml/serialize/BaseMarkupSerializer.java > =================================================================== > RCS file: > /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/BaseMarkupSerializer.java,v > retrieving revision 1.3 > diff -c -r1.3 BaseMarkupSerializer.java > *** BaseMarkupSerializer.java 2000/01/14 20:40:54 1.3 > --- BaseMarkupSerializer.java 2000/01/14 23:51:31 > *************** > *** 705,712 **** > { > // Only works if we're going out of DTD mode. > if ( _writer == _dtdWriter ) { > - System.out.println( "Writer " + _writer ); > - System.out.println( "DocWriter " + _docWriter ); > _line.append( _text ); > _text = new StringBuffer( 20 ); > flushLine( false ); > --- 705,710 ---- > *************** > *** 776,797 **** > // serialize it. > docType = ( (Document) node ).getDoctype(); > if ( docType != null ) { > ! startDTD( docType.getName(), null, null ); > ! map = docType.getEntities(); > ! if ( map != null ) { > ! for ( i = 0 ; i < map.getLength() ; ++i ) { > ! entity = (Entity) map.item( i ); > ! unparsedEntityDecl( entity.getNodeName(), > entity.getPublicId(), > ! entity.getSystemId(), > entity.getNotationName() ); > ! } > ! } > ! map = docType.getNotations(); > ! if ( map != null ) { > ! for ( i = 0 ; i < map.getLength() ; ++i ) { > ! notation = (Notation) map.item( i ); > ! notationDecl( notation.getNodeName(), > notation.getPublicId(), notation.getSystemId() ); > ! } > ! } > endDTD(); > } > // !! Fall through > --- 774,803 ---- > // serialize it. > docType = ( (Document) node ).getDoctype(); > if ( docType != null ) { > ! Class docTypeClass = docType.getClass(); > ! > ! String docTypePublicId = null; > ! String docTypeSystemId = null; > ! try { > ! java.lang.reflect.Method getPublicId = > docTypeClass.getMethod("getPublicId", null); > ! if (getPublicId.getReturnType().equals(String.class)) { > ! docTypePublicId = (String)getPublicId.invoke(docType, > null); > ! } > ! } > ! catch (Exception e) { > ! // ignore > ! } > ! try { > ! java.lang.reflect.Method getSystemId = > docTypeClass.getMethod("getSystemId", null); > ! if (getSystemId.getReturnType().equals(String.class)) { > ! docTypeSystemId = (String)getSystemId.invoke(docType, > null); > ! } > ! } > ! catch (Exception e) { > ! // ignore > ! } > ! > ! startDTD( docType.getName(), docTypePublicId, docTypeSystemId > ); > endDTD(); > } > // !! Fall through > // END Patch > > -- > Andy Clark * IBM, JTC - Silicon Valley * [EMAIL PROTECTED] -- ---------------------------------------------------------------------- Assaf Arkin www.exoffice.com CTO, Exoffice Technologies, Inc. www.exolab.org