jkesselm    01/11/29 11:41:51

  Modified:    java/src/org/apache/xml/dtm/ref DTMNodeProxy.java
  Log:
  Implement getDocumentElement. If the DTM doesn't represent a
  wellformed Document, this call is undefined and throws an exception...
  which isn't DOMlike but that's a non-DOMlike situation.
  
  Revision  Changes    Path
  1.12      +37 -3     xml-xalan/java/src/org/apache/xml/dtm/ref/DTMNodeProxy.java
  
  Index: DTMNodeProxy.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMNodeProxy.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DTMNodeProxy.java 2001/11/29 19:21:02     1.11
  +++ DTMNodeProxy.java 2001/11/29 19:41:51     1.12
  @@ -475,7 +475,8 @@
      */
     public final Document getOwnerDocument()
     {
  -    return new DTMNodeProxy(dtm, dtm.getDocument());
  +             return (Document)(dtm.getNode(dtm.getDocument()));
  +    //return new DTMNodeProxy(dtm, dtm.getDocument());
     }
   
     /**
  @@ -582,14 +583,47 @@
   
     /** This is a bit of a problem in DTM, since a DTM may be a Document
      * Fragment and hence not have a clear-cut Document Element. We can
  -   * make it work in some cases but would that be confusing for others?
  +   * make it work in the well-formed cases but would that be confusing for others?
      * 
      * @return
      * @see org.w3c.dom.Document
      */
     public final Element getDocumentElement()
     {
  -    throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);
  +             int dochandle=dtm.getDocument();
  +             int elementhandle=dtm.NULL;
  +             for(int kidhandle=dtm.getFirstChild(dochandle);
  +                             kidhandle!=dtm.NULL;
  +                             kidhandle=dtm.getNextSibling(kidhandle))
  +             {
  +                     switch(dtm.getNodeType(kidhandle))
  +                     {
  +                     case Node.ELEMENT_NODE:
  +                             if(elementhandle!=dtm.NULL) 
  +                             {
  +                                     elementhandle=dtm.NULL; // More than one; 
ill-formed.
  +                                     kidhandle=dtm.getLastChild(dochandle); // End 
loop
  +                             }
  +                             else
  +                                     elementhandle=kidhandle;
  +                             break;
  +                             
  +                     // These are harmless; document is still wellformed
  +                     case Node.COMMENT_NODE:
  +                     case Node.PROCESSING_INSTRUCTION_NODE:
  +                     case Node.DOCUMENT_TYPE_NODE:
  +                             break;
  +                                     
  +                     default:
  +                             elementhandle=dtm.NULL; // ill-formed
  +                             kidhandle=dtm.getLastChild(dochandle); // End loop
  +                             break;
  +                     }
  +             }
  +             if(elementhandle==dtm.NULL)
  +                     throw new DTMDOMException(DOMException.NOT_SUPPORTED_ERR);
  +             else
  +                     return (Element)(dtm.getNode(elementhandle));
     }
   
     /**
  
  
  

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

Reply via email to