Avatar billede fredand Forsker
24. juni 2002 - 14:03 Der er 1 løsning

Create Document in Java!

Hej!

Jag har stora problem med Document i XML.

Grejen är att jag har en XML-struktur med lite data i en String. Denna XML-struktur ska användas som standalone, utan DTD. Men jag är tyvärr så sopig på detta så jag får inte till det riktigt.

När jag kör nedanstående program så får jag detta memo:

file:/D:/JavaLabb/test: 1, 106: Element, "message_id_send" is not declared in th
e DTD
Press any key to continue . . .

Parsern verkar ju kräva en DTD. Så nu är frågan om du vet om det går att säga åt Parsern på
något mer tydligt sätt att XML-strukturen ska vara standalone än i själva XML-headern.

En variant är kanske att på något sätt trycka in XML-strängen direkt i Documentobjektet
men jag har ingen aning om hur man gör det?

Så all hjälp är väldigt välkommen.

Jättetack på förhand

Fredrik

PS länken till online-api:et är:

http://www-3.ibm.com/software/webservers/appserv/doc/v35/ae/apidocs/index.html

Jag kan inte heller byta XML-api pga stort projekt med många delar som använder detta.



import java.util.*;

import java.text.*;
import com.ibm.xml.parsers.*;
import com.ibm.xml.parser.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import java.io.*;

public class XmlTester
{
  public XmlTester()
  {
      StringBuffer xmlString = new StringBuffer();
      xmlString.append("<?xml version=\"1.0\" standalone=\"yes\" ?>");
      xmlString.append("<product_villa>");
      xmlString.append("<header>");
      xmlString.append("<message_id_send>511114351</message_id_send>");
      xmlString.append("<message_id_get>511114351</message_id_get>");
      xmlString.append("<userid>hejhopp</userid>");
      xmlString.append("<password>45984125</password>");
      xmlString.append("<error_number>0</error_number>");
      xmlString.append("<error_message>a</error_message>");
      xmlString.append("<info_text>b</info_text>");
      xmlString.append("<method value=\"SimUpdate\"/>");
      xmlString.append("</header>");
      xmlString.append("</product_villa>");

      //System.out.println(xmlString);
      StringReader sr = new StringReader(xmlString.toString());
      Parser parser = new Parser("test");

      Document document = parser.readStream(sr);
  }

  public static void main(String args[])
  {
      XmlTester xmlTester = new XmlTester();
  }
}
Avatar billede fredand Forsker
26. juni 2002 - 12:15 #1
Hello!
I had to do like this:
                String dtd;
                try
                {
                    File file = new File("skeletons/if/villa.dtd");
                    FileInputStream fileInputStream = new FileInputStream(file);
                    int size = new Long(file.length()).intValue();
                    byte[] bytes = new byte[size];
                    fileInputStream.read(bytes, 0, size);
                    dtd = new String(bytes);
                    fileInputStream.close();

                    StringBuffer stringBuffer = new StringBuffer(XMLString);
                    int end = "<?xml version=\"1.0\" standalone=\"yes\"?>".length();
                    int start = 0;
                    while(XMLString.indexOf("<?xml version=\"1.0\" standalone=\"yes\"?>", start) != -1)
                    {
                        start = XMLString.indexOf("<?xml version=\"1.0\" standalone=\"yes\"?>", start);
                        stringBuffer = stringBuffer.replace(start, start+end, dtd);
                        XMLString = stringBuffer.toString();
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
Seems like ther must be an better way.
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