Thank you Michael, by using the LSOutput with my FileWriter I was able to get this to work. For those who may have also encountered this problem, the actual code is below.

Looking at this further, how would the use of an LSParser w/ LSInputs compare to using the DocumentBuilder JAXP interface? Is the LSParser just DOM 3's answer to the lack of a parser interface in the DOM 1 & 2 standards, or is it something more?

Again, thanks for the help.

---------------------
public void writeXML(Element element, File outputFile) throws Exception{
DOMImplementation domImpl = element.getOwnerDocument().getImplementation();

DOMImplementationLS domImplLS = (DOMImplementationLS) domImpl.getFeature("LS", "3.0");

   LSSerializer serializer = domImplLS.createLSSerializer();

   LSOutput serializerOut = domImplLS.createLSOutput();
   serializerOut.setCharacterStream(new FileWriter(outputFile));

   serializer.write(element, serializerOut);
}

Michael Glavassevich wrote:
Hi Chad,

The encoding declared in your document (in the XML declaration) and the actual encoding of your document probably don't match after you've serialized it to a file. You should be passing a FileOutputStream to the serializer and let it handle the character encoding instead of using a FileWriter which assumes the platform default encoding (which could be anything) is acceptable. This was discussed on the j-dev list many months ago. The thread starts here [1] in the archives if you're interested.

Thanks.

[1] http://mail-archives.apache.org/mod_mbox/xerces-j-dev/200504.mbox/[EMAIL PROTECTED]

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]

Chad La Joie <[EMAIL PROTECTED]> wrote on 09/06/2006 02:26:30 PM:

I'm using Xerces-J 2.8.0 as my endorsed JAXP 1.3 parser. My code needs to write out XML and later read it back in. I'm using the LSSerializer to write out the root element node of my document to a string and then using a FileWriter
to
write it out to disk. Then I use a FileInputStream to read it in and parse it with a DocumentBuilder.

When I do this I get a SAX exception indicating I have invalid content
in the
prolog. I searched the archives and found a thread where someone else had this issue. It was caused by non-visible characters in the prolog. I
validated,
through an octal dump, that the file written by my code didn't have any
extra
characters.

Attached is a test case that reproduces the problem. Any assistance on
this
would be greatly appreciated. I'm sure I'm just messing up something with the Serializer but I'm not sure what.
--
Chad La Joie             2052-C Harris Bldg
OIS-Middleware           202.687.0124
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSSerializer;


public class XMLSerializeTest {

   private static DocumentBuilder docBuilder;

   public static void main(String[] args) throws Exception{
      String xmlFilePath = "/tmp/example.xml";

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
      docBuilder = builderFactory.newDocumentBuilder();

      // Create an example element
      Element exampleXML = createElement();

      // Write it out to a file and read it back in
      // It fails when reading it in
      File xmlFile = new File(xmlFilePath);
      writeXML(exampleXML, xmlFile);
      Element readXML = readXML(xmlFile);

      // Write it out to STDOUT
      System.out.println(nodeToString(readXML));

   }

   public static Element createElement() throws Exception{
      Document document = docBuilder.newDocument();

      Element rootElement = document.createElementNS("http://example.org
", "example:foo");
      document.appendChild(rootElement);
      rootElement.setAttribute("attrib1", "somevalue");
      rootElement.setAttribute("attrib2", "somevalue");

      return rootElement;
   }

public static void writeXML(Element element, File output)
throwsException{
       FileWriter out = new FileWriter(output);
        out.write(nodeToString(element));
        out.flush();
        out.close();
    }

    public static String nodeToString(Node node) {
        DOMImplementation domImpl = node.getOwnerDocument().
getImplementation();
DOMImplementationLS domImplLS = (DOMImplementationLS) domImpl.getFeature("LS", "3.0");
        LSSerializer serializer = domImplLS.createLSSerializer();
        return serializer.writeToString(node);
    }

    public static Element readXML(File input) throws Exception{
       FileInputStream in = new FileInputStream(input);
      Document document = docBuilder.parse(in);
      return document.getDocumentElement();
    }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

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


--
Chad La Joie             2052-C Harris Bldg
OIS-Middleware           202.687.0124

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

Reply via email to