Gary L Peskin wrote:

> Martin --
> 
> The DOM code looks fine.  I read it just the opposite of how you created
> it:
> 
>   FileInputStream istream = new
> FileInputStream("c:\\temp\\domMartin.ser");
>   ObjectInputStream p = new ObjectInputStream(istream);
>   Document doc = (Document) p.readObject();
>   istream.close();


I see - somehow I didn't think so far... ;-)


> 
> I think you should send the entire java program that you're using.  You
> show the call to transform but not how the transformer itself was
> created so I think you should send the entire java program.


The sourcecode is attached to this mail. (It's based on the 
DOM2DOM-sample of the Xalan2-distribution. I wanted to try out working 
with selfbuilded DOMs there before going with it to my real project). I 
also attached a file with the output (containing a few lines of 
debugging-stuff and then the stacktrace of the thrown exception(s)) of 
that program.

I just recognized another interesting thing: When I put calling the 
transformation into a try-catch-block with ignoring the exception, then 
he does a transformation, but only for the first appearance of the node 
the template should match with. Maybe the prg does that once and 
terminates then with the exception...


> Gary


Thanks


  Martin 



// Imported TraX classes
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.dom.DOMResult;

// Imported java.io classes
import java.io.IOException;
import java.io.FileNotFoundException;

// Imported SAX classes
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

// Imported DOM classes
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

// Imported Serializer classes
import org.apache.xalan.serialize.Serializer;
import org.apache.xalan.serialize.SerializerFactory;

import org.apache.xalan.templates.OutputProperties;

// Imported JAVA API for XML Parsing classes
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Element;
import org.apache.xerces.dom.DocumentImpl;
import javax.xml.transform.ErrorListener;



  /**
   * Show how to transform a DOM tree into another DOM tree.  
   * This uses the javax.xml.parsers to parse both an XSL file 
   * and the XML file into a DOM, and create an output DOM.
   */
public class myDOM2DOM
{
  private static final String NAMESPACE = "http://www.w3.org/1999/XSL/Transform";;
  // private static final String NAMESPACE = "http://mein.toller.namespace";;
    
    
  public static void main(String[] args)
      throws TransformerException, TransformerConfigurationException, 
             FileNotFoundException, ParserConfigurationException, 
             SAXException, IOException
  {
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Element tempElement = null;
    if(tFactory.getFeature(DOMSource.FEATURE) && 
tFactory.getFeature(DOMResult.FEATURE))
    {
      Document xslDoc = null;
      
      try {
        DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
        dFactory.setNamespaceAware( true );
        DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
      
        // With this, all works very well (see xalan-sample "DOM2DOM"):
        // // Use the DocumentBuilder to parse the XSL stylesheet.
        // xslDoc = dBuilder.parse("birds.xsl");
        
        DOMImplementation domImpl = dBuilder.getDOMImplementation();
        xslDoc = domImpl.createDocument( NAMESPACE, "xsl:stylesheet", null );
        tempElement = xslDoc.getDocumentElement();
        System.out.println( "DocumentElement: " + tempElement.getTagName() );
        
        tempElement.setAttributeNS( null, "version", "1.0" );
        tempElement.setAttributeNS( "http://www.w3.org/2000/xmlns/";, "xmlns:xsl",
                                    "http://www.w3.org/1999/XSL/Transform"; );
        
        Element output = (Element) xslDoc.createElementNS( NAMESPACE, "xsl:output" );
        output.setAttributeNS( null, "method", "xml");
        output.setAttributeNS( null, "indent", "yes");
        tempElement.appendChild( output );
        
        Element el1 = (Element) xslDoc.createElementNS( NAMESPACE, "xsl:template" );
        el1.setAttributeNS( null, "match", "Order" );
        Element el2 = (Element) xslDoc.createElementNS( null, "hr" );
        el1.appendChild( el2 );
        tempElement.appendChild( el1 );
        
      } catch (ParserConfigurationException pce) {
            // Parser with specified options can't be built
          System.out.println( "Tatah...! - ParserConfigurationException" );
          pce.printStackTrace();
      }
      
      /*
      java.io.FileOutputStream fos = new java.io.FileOutputStream("dom.ser");
      java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(fos);
      oos.writeObject(xslDoc);
      oos.flush();
      fos.close();
      */
      
      System.out.println( "--------------------------------------------" );
      Serializer serializer = SerializerFactory.getSerializer
                   (OutputProperties.getDefaultMethodProperties("xml"));
      serializer.setOutputStream(System.out);
      serializer.asDOMSerializer().serialize( xslDoc);
      System.out.println( "\n--------------------------------------------" );


      // Use the DOM Document to define a DOMSource object.
      DOMSource xslDomSource = new DOMSource();
      
      System.out.println("Jetzt Zuweisung der Node zum DomSource");
      xslDomSource.setNode( xslDoc );      
      System.out.println( "getNode: " + xslDomSource.getNode().getNodeName() );
      
      // Set the systemId: note this is actually a URL, not a local filename
      xslDomSource.setSystemId( "myXSLT.xsl" );  //  "http://blah.blub";);

      // Process the stylesheet DOMSource and generate a Transformer.
      System.out.println("bis hierher bin ich gekommen...");
      
      Transformer transformer = tFactory.newTransformer(xslDomSource);
      System.out.println("und wie stehts mit dieser Codestelle?");
      
      //Use the DocumentBuilder to parse the XML input.
      Document xmlDoc = null;
      try {
        DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

        // And setNamespaceAware, which is required when parsing xsl files
        dFactory.setNamespaceAware(true);
        
        //Use the DocumentBuilderFactory to create a DocumentBuilder.
        DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
        System.out.println("Parse nun birds.xml");
        
        xmlDoc = dBuilder.parse("birds.xml");
      } catch (ParserConfigurationException pce) {
            // Parser with specified options can't be built
          System.out.println( "Tatah...! - ParserConfigurationException" );
          pce.printStackTrace();
      }
      // Use the DOM Document to define a DOMSource object.
      DOMSource xmlDomSource = new DOMSource(xmlDoc);
      
      // Set the base URI for the DOMSource so any relative URIs it contains can
      // be resolved.
      xmlDomSource.setSystemId("birds.xml");
      
      // Create an empty DOMResult for the Result.
      DOMResult domResult = new DOMResult();
      
      System.out.println("Rufe nun den Transformer auf.");
      // Perform the transformation, placing the output in the DOMResult.
      // try{      
      transformer.transform(xmlDomSource, domResult);  // <- !!!
      // }catch( javax.xml.transform.TransformerException te ) {
      //   ...
      // }

      // Instantiate an Xalan XML serializer and use it to serialize the 
      // output DOM to System.out.
      
      // using a default output format.
      // Serializer serializer = SerializerFactory.getSerializer
      //                             
(OutputProperties.getDefaultMethodProperties("xml"));
      // serializer.setOutputStream(System.out);
      serializer.asDOMSerializer().serialize(domResult.getNode());
    }
    else
    {
      throw new org.xml.sax.SAXNotSupportedException("DOM node processing not 
supported!");
    }
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<Class>
<Order Name="TINAMIFORMES">
        <Family Name="TINAMIDAE">
            <Species Scientific_Name="Tinamus major">  Great Tinamou.</Species>
            <Species Scientific_Name="Nothocercus">Highland Tinamou.</Species>
            <Species Scientific_Name="Crypturellus soui">Little Tinamou.</Species>
            <Species Scientific_Name="Crypturellus cinnamomeus">Thicket Tinamou.</Species>
            <Species Scientific_Name="Crypturellus boucardi">Slaty-breasted Tinamou.</Species>
            <Species Scientific_Name="Crypturellus kerriae">Choco Tinamou.</Species>
        </Family>
    </Order>
<Order Name="GAVIIFORMES">
        <Family Name="GAVIIDAE">
            <Species Scientific_Name="Gavia stellata">Red-throated Loon.</Species>
            <Species Scientific_Name="Gavia arctica">Arctic Loon.</Species>
            <Species Scientific_Name="Gavia pacifica">Pacific Loon.</Species>
            <Species Scientific_Name="Gavia immer">Common Loon.</Species>
            <Species Scientific_Name="Gavia adamsii">Yellow-billed Loon.</Species>
        </Family>
    </Order>


<Order Name="PODICIPEDIFORMES">
        <Family Name="PODICIPEDIDAE">
            <Species Scientific_Name="Tachybaptus dominicus">Least Grebe.</Species>
            <Species Scientific_Name="Podilymbus podiceps">Pied-billed Grebe.</Species>
            <Species Scientific_Name="">Atitlan Grebe.</Species>
            <Species Scientific_Name="">Horned Grebe.</Species>
            <Species Scientific_Name="">Red-necked Grebe.</Species>
            <Species Scientific_Name="">Eared Grebe.</Species>
            <Species Scientific_Name="">Western Grebe.</Species>
            <Species Scientific_Name="">Clark's Grebe.</Species>
            <Species Scientific_Name=""/>
        </Family>
    </Order>


<Order Name="PROCELLARIIFORMES">
        <Family Name="DIOMEDEIDAE">
            <Species Scientific_Name="Thalassarche chlororhynchos">Yellow-nosed Albatross. (A)</Species>
            <Species Scientific_Name="Thalassarche cauta">Shy Albatross. (A)</Species>
            <Species Scientific_Name="Thalassarche melanophris">Black-browed Albatross. (A)</Species>
            <Species Scientific_Name="Phoebetria palpebrata">Light-mantled Albatross. (A)</Species>
            <Species Scientific_Name="Diomedea exulans">Wandering Albatross. (A)</Species>
            <Species Scientific_Name="Phoebastria immutabilis">Laysan Albatross.</Species>
            <Species Scientific_Name="Phoebastria nigripes">Black-footed Albatross.</Species>
            <Species Scientific_Name="Phoebastria albatrus">Short-tailed Albatross. (N)</Species>
        </Family>
        <Family Name="PROCELLARIIDAE">
            <Species Scientific_Name="Fulmarus glacialis">Northern Fulmar.</Species>
            <Species Scientific_Name="Pterodroma neglecta">Kermadec Petrel. (A)</Species>
            <Species Scientific_Name="Pterodroma arminjoniana">Herald Petrel. (A)</Species>
            <Species Scientific_Name="Pterodroma ultima">Murphy's Petrel. (N)</Species>
            <Species Scientific_Name="Pterodroma inexpectata">Mottled Petrel. (A)</Species>
            <Species Scientific_Name="Pterodroma cahow">Bermuda Petrel.</Species>
            <Species Scientific_Name="Pterodroma hasitata">Black-capped Petrel.</Species>
            <Species Scientific_Name="Pterodroma externa">Juan Fernandez Petrel. (N)</Species>
            <Species Scientific_Name="Pterodroma phaeopygia">Dark-rumped Petrel.</Species>
            <Species Scientific_Name="Pterodroma cervicalis">White-necked Petrel. (H)</Species>
            <Species Scientific_Name="Pterodroma hypoleuca">Bonin Petrel. (H)</Species>
            <Species Scientific_Name="Pterodroma nigripennis">Black-winged Petrel. (H, A)</Species>
            <Species Scientific_Name="Pterodroma cookii">Cook's Petrel. (N)</Species>
            <Species Scientific_Name="Pterodroma longirostris">Stejneger's Petrel. (A)</Species>
            <Species Scientific_Name="Bulweria bulwerii">Bulwer's Petrel. (H)</Species>
            <Species Scientific_Name="Bulweria fallax">Jouanin's Petrel. (H, A)</Species>
            <Species Scientific_Name="Procellaria parkinsoni">Parkinson's Petrel. (N)</Species>
            <Species Scientific_Name="Calonectris leucomelas">Streaked Shearwater. (A)</Species>
            <Species Scientific_Name="Calonectris diomedea">Cory's Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus creatopus">Pink-footed Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus carneipes">Flesh-footed Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus gravis">Greater Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus pacificus">Wedge-tailed Shearwater.</Species>
            <Species Scientific_Name="Puffinus bulleri">Buller's Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus griseus">Sooty Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus tenuirostris">Short-tailed Shearwater. (N)</Species>
            <Species Scientific_Name="Puffinus nativitatis">Christmas Shearwater. (H)</Species>
            <Species Scientific_Name="Puffinus puffinus">Manx Shearwater.</Species>
            <Species Scientific_Name="Puffinus auricularis">Townsend's Shearwater.</Species>
            <Species Scientific_Name="Puffinus opisthomelas">Black-vented Shearwater.</Species>
            <Species Scientific_Name="Puffinus lherminieri">Audubon's Shearwater.</Species>
            <Species Scientific_Name="Puffinus assimilis">Little Shearwater. (A)</Species>
        </Family>
        <Family Name="HYDROBATIDAE">
            <Species Scientific_Name="Oceanites oceanicus">Wilson's Storm-Petrel. (N)</Species>
            <Species Scientific_Name="Pelagodroma marina">White-faced Storm-Petrel. (A)</Species>
            <Species Scientific_Name="Hydrobates pelagicus">European Storm-Petrel. (A)</Species>
            <Species Scientific_Name="Oceanodroma furcata">Fork-tailed Storm-Petrel.</Species>
            <Species Scientific_Name="Oceanodroma leucorhoa">Leach's Storm-Petrel.</Species>
            <Species Scientific_Name="Oceanodroma homochroa">Ashy Storm-Petrel.</Species>
            <Species Scientific_Name="Oceanodroma castro">Band-rumped Storm-Petrel. (N)</Species>
            <Species Scientific_Name="Oceanodroma tethys">Wedge-rumped Storm-Petrel. (N)</Species>
            <Species Scientific_Name="Oceanodroma melania">Black Storm-Petrel.</Species>
            <Species Scientific_Name="Oceanodroma macrodactyla">Guadalupe Storm-Petrel.</Species>
            <Species Scientific_Name="Oceanodroma markhami">Markham's Storm-Petrel. (A)</Species>
            <Species Scientific_Name="Oceanodroma tristrami">Tristram's Storm-Petrel. (H)</Species>
            <Species Scientific_Name="Oceanodroma microsoma">Least Storm-Petrel.</Species>
        </Family>
    </Order>

<Order Name="PELECANIFORMES">
        <Family Name="PHAETHONTIDAE">
            <Species Scientific_Name="Phaethon lepturus">White-tailed Tropicbird.</Species>
            <Species Scientific_Name="Phaethon aethereus">Red-billed Tropicbird.</Species>
            <Species Scientific_Name="Phaethon rubricauda">Red-tailed Tropicbird.</Species>
        </Family>
        <Family Name="SULIDAE">
            <Species Scientific_Name="Sula dactylatra">Masked Booby.</Species>
            <Species Scientific_Name="Sula nebouxii">Blue-footed Booby.</Species>
            <Species Scientific_Name="Sula variegata">Peruvian Booby. (A)</Species>
            <Species Scientific_Name="Sula leucogaster">Brown Booby.</Species>
            <Species Scientific_Name="Sula sula">Red-footed Booby.</Species>
            <Species Scientific_Name="Morus bassanus">Northern Gannet.</Species>
        </Family>
        <Family Name="PELECANIDAE">
            <Species Scientific_Name="Pelecanus erythrorhynchos">American White Pelican.</Species>
            <Species Scientific_Name="Pelecanus occidentalis">Brown Pelican.</Species>
        </Family>
        <Family Name="PHALACROCORACIDAE">
            <Species Scientific_Name="Phalacrocorax penicillatus">Brandt's Cormorant.</Species>
            <Species Scientific_Name="Phalacrocorax brasilianus">Neotropic Cormorant.</Species>
            <Species Scientific_Name="Phalacrocorax auritus">Double-crested Cormorant.</Species>
            <Species Scientific_Name="Phalacrocorax carbo">Great Cormorant.</Species>
            <Species Scientific_Name="Phalacrocorax urile">Red-faced Cormorant.</Species>
            <Species Scientific_Name="Phalacrocorax pelagicus">Pelagic Cormorant.</Species>
        </Family>
        <Family Name="ANHINGIDAE">
            <Species Scientific_Name="Anhinga anhinga">Anhinga.</Species>
        </Family>
        <Family Name="FREGATIDAE">
            <Species Scientific_Name="Fregata magnificens">Magnificent Frigatebird.</Species>
            <Species Scientific_Name="Fregata minor">Great Frigatebird.</Species>
            <Species Scientific_Name="Fregata ariel">Lesser Frigatebird. (A)</Species>
        </Family>
    </Order>
</Class>
sparenbe@mango:~ > java myDOM2DOM
DocumentElement: xsl:stylesheet
--------------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";><xsl:output indent="yes" 
method="xml"/><xsl:template match="Order"><hr/></xsl:template></xsl:stylesheet>
--------------------------------------------
Jetzt Zuweisung der Node zum DomSource
getNode: #document
bis hierher bin ich gekommen...
und wie stehts mit dieser Codestelle?
Parse nun birds.xml
Rufe nun den Transformer auf.
Exception in thread "main" javax.xml.transform.TransformerException: Can't have more 
than one root on a DOM!
        at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at myDOM2DOM.main(myDOM2DOM.java, Compiled Code)
---------
javax.xml.transform.TransformerException: Can't have more than one root on a DOM!
        at 
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java, Compiled 
Code)
        at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java,
 Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at myDOM2DOM.main(myDOM2DOM.java, Compiled Code)
---------
org.xml.sax.SAXException: Can't have more than one root on a DOM!
        at org.apache.xml.utils.DOMBuilder.append(DOMBuilder.java, Compiled Code)
        at org.apache.xml.utils.DOMBuilder.startElement(DOMBuilder.java, Compiled Code)
        at 
org.apache.xalan.transformer.QueuedStartElement.flush(QueuedStartElement.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.ResultTreeHandler.flushPending(ResultTreeHandler.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.ResultTreeHandler.endElement(ResultTreeHandler.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java, Compiled 
Code)
        at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java,
 Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at myDOM2DOM.main(myDOM2DOM.java, Compiled Code)
---------
org.xml.sax.SAXException: Can't have more than one root on a DOM!
        at org.apache.xml.utils.DOMBuilder.append(DOMBuilder.java, Compiled Code)
        at org.apache.xml.utils.DOMBuilder.startElement(DOMBuilder.java, Compiled Code)
        at 
org.apache.xalan.transformer.QueuedStartElement.flush(QueuedStartElement.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.ResultTreeHandler.flushPending(ResultTreeHandler.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.ResultTreeHandler.endElement(ResultTreeHandler.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java, Compiled 
Code)
        at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java, 
Compiled Code)
        at 
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java,
 Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java, 
Compiled Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at 
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java, Compiled 
Code)
        at myDOM2DOM.main(myDOM2DOM.java, Compiled Code)
sparenbe@mango:~ >

Reply via email to