johng       01/07/17 19:53:59

  Modified:    java/src/org/apache/xalan/lib/sql SQLDocument.java
  Log:
  Fixed a few bugs, almost there
  Submitted by: John Gentilin mailto:[EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.7       +100 -15   xml-xalan/java/src/org/apache/xalan/lib/sql/SQLDocument.java
  
  Index: SQLDocument.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/lib/sql/SQLDocument.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SQLDocument.java  2001/07/15 20:09:34     1.6
  +++ SQLDocument.java  2001/07/18 02:53:58     1.7
  @@ -99,9 +99,16 @@
    */
   public class SQLDocument extends DTMDefaultBaseIterators
   {
  +
  +  public interface CharacterNodeHandler
  +  {
  +    public void characters(Node node)
  +            throws org.xml.sax.SAXException;
  +  }
  +
     private boolean DEBUG = false;
   
  -  private static final String S_NAMESPACE = null;
  +  private static final String S_NAMESPACE = "";
   
     private static final String S_ATTRIB_NOT_SUPPORTED="Not Supported";
     private static final String S_ISTRUE="true";
  @@ -114,7 +121,7 @@
     private static final String S_COLUMN_HEADER = "column-header";
     private static final String S_ROW_SET = "row-set";
     private static final String S_ROW = "row";
  -  private static final String S_COL = "col";
  +  private static final String S_COL = "column";
   
     private static final String S_CATALOGUE_NAME = "catalogue-name";
     private static final String S_DISPLAY_SIZE = "column-display-size";
  @@ -278,10 +285,6 @@
         error("ERROR Extracting Metadata");
       }
   
  -    // The idx will represent the previous sibling for all the
  -    // attribute nodes
  -    int idx;
  -
       // The ColHeaderIdx will be used to keep track of the
       // Element entries for the individual Column Header.
       int lastColHeaderIdx = DTM.NULL;
  @@ -321,7 +324,6 @@
             S_ATTRIB_NOT_SUPPORTED,
             m_ColAttrib_COLUMN_LABEL_TypeID, lastColHeaderIdx);
         }
  -
   /*
         try
         {
  @@ -740,7 +742,7 @@
         }
         else
         {
  -        m_LastRowIdx = addElement(2, m_Row_TypeID, m_RowSetIdx, m_LastRowIdx);
  +        m_LastRowIdx = addElement(3, m_Row_TypeID, m_RowSetIdx, m_LastRowIdx);
         }
   
         int colID = DTM.NULL;
  @@ -761,7 +763,7 @@
       }
   
       // Only do a single row...
  -    return false;
  +    return true;
     }
   
   
  @@ -1023,6 +1025,76 @@
       }
     }
   
  +
  +  /**
  +   * Retrieve the text content of a DOM subtree, appending it into a
  +   * user-supplied FastStringBuffer object. Note that attributes are
  +   * not considered part of the content of an element.
  +   * <p>
  +   * There are open questions regarding whitespace stripping.
  +   * Currently we make no special effort in that regard, since the standard
  +   * DOM doesn't yet provide DTD-based information to distinguish
  +   * whitespace-in-element-context from genuine #PCDATA. Note that we
  +   * should probably also consider xml:space if/when we address this.
  +   * DOM Level 3 may solve the problem for us.
  +   * <p>
  +   * %REVIEW% Note that as a DOM-level operation, it can be argued that this
  +   * routine _shouldn't_ perform any processing beyond what the DOM already
  +   * does, and that whitespace stripping and so on belong at the DTM level.
  +   * If you want a stripped DOM view, wrap DTM2DOM around DOM2DTM.
  +   *
  +   * @param node Node whose subtree is to be walked, gathering the
  +   * contents of all Text or CDATASection nodes.
  +   * @param buf FastStringBuffer into which the contents of the text
  +   * nodes are to be concatenated.
  +   */
  +  protected static void dispatchNodeData(Node node,
  +                                         org.xml.sax.ContentHandler ch,
  +                                         int depth)
  +            throws org.xml.sax.SAXException
  +  {
  +
  +    switch (node.getNodeType())
  +    {
  +    case Node.DOCUMENT_FRAGMENT_NODE :
  +    case Node.DOCUMENT_NODE :
  +    case Node.ELEMENT_NODE :
  +    {
  +      for (Node child = node.getFirstChild(); null != child;
  +              child = child.getNextSibling())
  +      {
  +        dispatchNodeData(child, ch, depth+1);
  +      }
  +    }
  +    break;
  +    case Node.PROCESSING_INSTRUCTION_NODE : // %REVIEW%
  +    case Node.COMMENT_NODE :
  +      if(0 != depth)
  +        break;
  +        // NOTE: Because this operation works in the DOM space, it does _not_ 
attempt
  +        // to perform Text Coalition. That should only be done in DTM space.
  +    case Node.TEXT_NODE :
  +    case Node.CDATA_SECTION_NODE :
  +    case Node.ATTRIBUTE_NODE :
  +      String str = node.getNodeValue();
  +      if(ch instanceof CharacterNodeHandler)
  +      {
  +        ((CharacterNodeHandler)ch).characters(node);
  +      }
  +      else
  +      {
  +        ch.characters(str.toCharArray(), 0, str.length());
  +      }
  +      break;
  +//    /* case Node.PROCESSING_INSTRUCTION_NODE :
  +//      // warning(XPATHErrorResources.WG_PARSING_AND_PREPARING);
  +//      break; */
  +    default :
  +      // ignore
  +      break;
  +    }
  +  }
  +
     /*********************************************************************/
     /*********************************************************************/
     /******************* End of Functions we Wrote ***********************/
  @@ -1237,18 +1309,31 @@
      * @return
      * @throws org.xml.sax.SAXException
      */
  -  public void dispatchCharactersEvents( int parm1, ContentHandler parm2, boolean 
parm3 )
  -    throws org.xml.sax.SAXException
  +  public void dispatchCharactersEvents(
  +          int nodeHandle, org.xml.sax.ContentHandler ch,
  +          boolean normalize)
  +            throws org.xml.sax.SAXException
     {
       if (DEBUG)
       {
         System.out.println("dispatchCharacterEvents(" +
  -      parm1 + "," +
  -      parm2 + "," +
  -      parm3 + ")");
  +      nodeHandle + "," +
  +      ch + "," +
  +      normalize + ")");
       }
   
  -    return;
  +    if(normalize)
  +    {
  +      XMLString str = getStringValue(nodeHandle);
  +      str = str.fixWhiteSpace(true, true, false);
  +      str.dispatchCharactersEvents(ch);
  +    }
  +    else
  +    {
  +      int type = getNodeType(nodeHandle);
  +      Node node = getNode(nodeHandle);
  +      dispatchNodeData(node, ch, 0);
  +    }
     }
   
     /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to