Oracle8i Application Developer's Guide - XML
Release 3 (8.1.7)

Part Number A86030-01

Library

Product

Contents

Index

Go to previous page Go to beginning of chapter Go to next page

Using XML Parser for Java, 18 of 22


Adding XML Document as a Child

Adding an XMLDocument as a Child to Another Element

Question

I am trying to add an XMLDocument as a child to an existing element. Here's an example:

import org.w3c.dom.*;
import java.util.*;
import java.io.*;
import java.net.*;
import oracle.xml.parser.v2.*;
public class ggg {public static void main (String [] args) throws Exception
 {
new ggg().doWork();;
public void doWork() throws Exception {XMLDocument doc1 = new XMLDocument();
Element root1=doc1.createElement("root1");
XMLDocument doc2= new XMLDocument();	Element root2=doc2.createElement("root2");
	root1.appendChild(root2);
doc1.print(System.out);};};

This reports:

D:\Temp\Oracle\sample>c:\jdk1.2.2\bin\javac -classpath 
D:\Temp\Oracle\lib\xmlparserv2.jar;. 
ggg.javaD:\Temp\Oracle\sample>c:\jdk1.2.2\bin\java -classpath 
D:\Temp\Oracle\lib\xmlparserv2.jar;. gggException in thread "main" 
java.lang.NullPointerException        at 
oracle.xml.parser.v2.XMLDOMException.(XMLDOMException.java:67)        at 
oracle.xml.parser.v2.XMLNode.checkDocument(XMLNode.java:919)        at 
oracle.xml.parser.v2.XMLNode.appendChild(XMLNode.java, Compiled Code)        at 
oracle.xml.parser.v2.XMLNode.appendChild(XMLNode.java:494)        at 
ggg.doWork(ggg.java:20)        at ggg.main(ggg.java:12)

Answer a

The following works for me: :

DocumentFragment rootNode = new XMLDocumentFragment(); DOMParser d  = new 
DOMParser(); d.parse("http://.../stuff.xml"); 
Document doc = d.getDocument(); 
Element e = doc.getDocumentElement(); 
// Important to remove it from the first doc 
// before adding it to the other doc. doc.removeChild(e); 
rootNode.appendChild(e); 

You need to use the DocumentFragment class to do this as a document cannot have more than one root.

Answer b

Actually, isn't this specifically a problem with appending a node created in another document, since all nodes contain a reference to the document they are created in? While Document Fragmentsolves this, it isn't a more than one root problem, is it? Is there a quick or easy way to convert a com.w3c.dom.Document to org.w3c.dom.DocumentFragment?

Adding an XMLDocumentFragment as a Child to XMLDocument

Question

I have this piece of code:

XSLStylesheet XSLProcessorStylesheet = new XSLStylesheet(XSLProcessorDoc, 
XSLProcessorURL);
XSLStylesheet XSLRendererStylesheet = new XSLStylesheet(XSLRendererDoc, 
XSLRendererURL);
XSLProcessor processor = new XSLProcessor();
// configure the processorprocessor.showWarnings(true);
processor.setErrorStream(System.err);
XMLDocumentFragment processedXML = processor.processXSL(XSLProcessorStylesheet, 
XMLInputDoc);
XMLDocumentFragment renderedXML = processor.processXSL(XSLRendererStylesheet, 
processedXML);
Document resultXML = new XMLDocument();
resultXML.appendChild(renderedXML);

The last line causes Exception in thread "main" oracle.xml.parser.v2.

XMLDOMException: Node of this type cannot be added.

Do I have to create a root element _every time_, even if I know that the resulting DocumentFragment is a well formed XML Document (and of course has only one root element!)?

Answer

It happens, as you have guessed, because a Fragment can have more than one "root" element (for lack of a better term). In order towork around this, use the Node functions to extract the one rootelement from your fragment and cast it into an


Go to previous page Go to beginning of chapter Go to next page
Oracle
Copyright © 1996-2000, Oracle Corporation.

All Rights Reserved.

Library

Product

Contents

Index