Avatar billede mungojerrie Nybegynder
02. juni 2004 - 10:57 Der er 7 kommentarer og
1 løsning

Java og xml

Hej

Jeg vil gerne lave en klasse som henter et sql resultset og danner et xml document. Jeg har læst Arne v's artikel :

http://www.eksperten.dk/artikler/245

omkring det at lave et document i xml, men jeg får fejlen:

java.lang.UnsupportedOperationException: The Saxon DOM cannot be updated. Har fundet ud af at det er min kodelinje

Element one1 = doc.createElement("one");

Er der nogen som kan hjælpe ?



/*
* Created on 02-06-2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package dk.evikali.evikaliSMS.client.gui.customer;

import java.io.IOException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
/**
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class xmltest {
   
    public xmltest(){
           
        try {

            // lav nyt DOM træ

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

            DocumentBuilder db = dbf.newDocumentBuilder();

            Document doc = db.newDocument();

            // tilføj elementer til DOM træ

            Element one1 = doc.createElement("one");

            one1.appendChild(doc.createTextNode("A"));

            Element one2 = doc.createElement("one");

            one2.appendChild(doc.createTextNode("BB"));

            Element one3 = doc.createElement("one");

            one3.appendChild(doc.createTextNode("CCC"));

            Element all = doc.createElement("all");

            all.appendChild(one1);

            all.appendChild(one2);

            all.appendChild(one3);

            doc.appendChild(all);

            // udskriv DOM træ

            OutputFormat fmt = new OutputFormat();

            fmt.setIndenting(true);
            doc.toString();

            XMLSerializer ser = new XMLSerializer(System.out, fmt);

            ser.serialize(doc);

        } catch (FactoryConfigurationError e) {

            e.printStackTrace();

        } catch (ParserConfigurationException e) {

            e.printStackTrace();

        }
        catch (IOException e) {
       
                    e.printStackTrace();
       
        }

        return;

    }
}
Avatar billede arne_v Ekspert
02. juni 2004 - 11:00 #1
Umiddelbart tror jeg at du skal prøve at skifte XML parser implementation.

Java 1.4.x : prøv og fjern Saxon

Java 1.3.x : prøv og fjern Saxon og tilføj Xerces eller Crimson
Avatar billede mungojerrie Nybegynder
02. juni 2004 - 11:06 #2
altså fjerne jar filen med saxon fra mit projekt ??
Avatar billede mungojerrie Nybegynder
02. juni 2004 - 11:38 #3
jeg kan nemlig ikke bare fjerne saxon.jar filen, da den bruges af andre klasser. Er der andre muligheder ?
Avatar billede arne_v Ekspert
02. juni 2004 - 12:29 #4
Det var det jeg tænkte på.

Bruger de andre klasser Saxon specifikke klaser/metoder ?

Har du nyeste version af Saxon ?
Avatar billede mungojerrie Nybegynder
02. juni 2004 - 13:13 #6
ja, jeg fandt også de artikler.....

kan jeg ikke bruge jdom i stedet for ?

Jeg fandt dette eksempel som bruger xerces, men den giver samme fejl......

/*
* Created on 02-06-2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package dk.evikali.evikaliSMS.client.gui.customer;

import java.io.IOException;
import java.io.StringWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

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

import org.apache.xerces.jaxp.DocumentBuilderFactoryImpl;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class xmltest {

  // XML tag's
  private static final String TAG_PROBE_MSG      = "ProbeMsg";
  private static final String TAG_TIMESTAMP      = "TimeStamp";
  private static final String TAG_PROPE_ID      = "ProbeId";
  private static final String TAG_PROPE_VALUE    = "ProbeValue";

  // XML Settings
  private static final String XML_VERSION        = "1.0";
  private static final String XML_ENCODING      = "UTF-8";

  // Format definitions
  private static final String DATE_TIME_FORMAT  =
    "yyyy-MM-dd'T'HH:mm:ss'Z'";

  // Variables
  private Date    msgTimeStamp  = null;
  private String  probeId      = "";
  private Integer  probeValue    = null;
  private Document xmlDoc        = null;
  private String  xmlStr        = null;

  // Constructor
  public xmltest(Date pTimeStamp, String pProbeId, int pProbeValue ) {

    this.msgTimeStamp = pTimeStamp;
    this.probeId      = pProbeId;
    this.probeValue  = new Integer(pProbeValue);

    // Generate the XML Document using DOM
    this.generateXMLDocument();

    // Generate a XML String
    this.generateXMLString();
  }

  // Retrive probe message as XML string
  public String getXMLString() {
    return xmlStr;
  }

  // Generate a DOM XML document
  private void generateXMLDocument()
  {
    Element main;
    Element root;
    Element item;
    DateFormat timeStampFormat =
      new SimpleDateFormat( DATE_TIME_FORMAT );

    try {

      //Create a XML Document
      DocumentBuilderFactory dbFactory =
        DocumentBuilderFactoryImpl.newInstance();
      DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
      xmlDoc = docBuilder.newDocument();
    } catch(Exception e) {
        System.out.println("Error " + e);
    }

    // Create the root element
    root = xmlDoc.createElement(TAG_PROBE_MSG);

    // Add TimeStamp Element and its value
    item = xmlDoc.createElement(TAG_TIMESTAMP);
    item.appendChild(xmlDoc.createTextNode(
      timeStampFormat.format(msgTimeStamp)));
    root.appendChild(item);

    // Add ProbeId Element and its value
    item = xmlDoc.createElement(TAG_PROPE_ID);
    item.appendChild(xmlDoc.createTextNode(probeId));
    root.appendChild(item);

    // Add ProbeValue Element and its value
    item = xmlDoc.createElement(TAG_PROPE_VALUE);
    item.appendChild(xmlDoc.createTextNode(probeValue.toString() ));
    item.setAttribute("ScaleUnit", "mm");
    root.appendChild(item);

    // Add to the root Element
    xmlDoc.appendChild(root);

  }

  // Generate String out of the XML document object
  private void generateXMLString() {

    StringWriter  strWriter    = null;
    XMLSerializer probeMsgSerializer  = null;
    OutputFormat  outFormat    = null;

    try {
      probeMsgSerializer = new XMLSerializer();
      strWriter = new StringWriter();
      outFormat = new OutputFormat();

      // Setup format settings
      outFormat.setEncoding(XML_ENCODING);
      outFormat.setVersion(XML_VERSION);
      outFormat.setIndenting(true);
      outFormat.setIndent(4);

      // Define a Writer
      probeMsgSerializer.setOutputCharStream(strWriter);

      // Apply the format settings
      probeMsgSerializer.setOutputFormat(outFormat);

      // Serialize XML Document
      probeMsgSerializer.serialize(xmlDoc);
      this.xmlStr = strWriter.toString();
      strWriter.close();

    } catch (IOException ioEx) {
        System.out.println("Error " + ioEx);
    }
  }

  public static void main (String argv[]) {

    xmltest pMsg = new xmltest(new Date()  // Timestamp
                                ,"1A6F"      // Probe ID
                                ,1245);      // Probe Value
    System.out.println(pMsg.getXMLString() );
  }
}
Avatar billede mungojerrie Nybegynder
02. juni 2004 - 14:20 #7
har fundet en løsning....


System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");

så virker skidtet.....
Avatar billede mungojerrie Nybegynder
03. juni 2004 - 17:38 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester