XML in Text umwandeln

Eddymaniac

Erfahrenes Mitglied
Hallo Leute,

vorab muss ich zugeben, dass meine Java Kenntnisse sehr gering sind.

Was ich aber letztendlich brauche ist ein Javaprogramm, dass eine XML Datei in eine einfache .txt Datei umwandelt.

Hierbei kann auch ruhig die "eingerückte" Struktur verlohren gehen. Hauptsache ist, dass nach jedem schließendem Tag ein Zeilenumbruch gemacht wird.

Dummerweise ist meine Erfahrung was XML Verarbeitung angeht noch geringer wie meine Javakenntnis insgesamt. Könnte mir vielleicht jemand helfen oder einen kleinen oder auch größeren Denkanstoß geben?

Ich habe auch schon gegoogelt aber leider nix brauchbares gefunden.

Besten Dank im Voraus...

Eddy
 

zerix

Hausmeister
Moderator
Hallo,

also ich weiß im Moment nicht so ganz was dein Problem ist. Datei kopieren und statt xml die Endung txt dran hängen. ;-)

Falls es so nicht gewollt ist, bitte ich nochmal um Erklärung.

Java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;

public class FileCopyExample
{
  public static void main(String[] args) throws Exception
  {
    FileInputStream fis = new FileInputStream("C:/test.xml");
    FileChannel fic = fis.getChannel();
    FileOutputStream fos = new FileOutputStream("C:/test.txt");
    FileChannel foc = fos.getChannel();
    copy(fic, foc);
    fis.close();
    fos.close();
  }

  private static void copy(FileChannel in, FileChannel out) throws Exception
  {
    long position = 0;
    long transfered;
    long remaining = in.size();
    while (remaining > 0)
    {
      transfered = in.transferTo(position, remaining, out);
      position += transfered;
      remaining -= transfered;
    }
  }
}


MFG

Sascha
 

Eddymaniac

Erfahrenes Mitglied
Sorry, nein ist nicht ganz richtig.

Im endeffekt ist es so, wenn ich XML Dateien mit einem einfachen Editor wie vi oder WordPad öffne, dass dann alles in einer "Endloszeile" steht. Damit kann ich leider nichts anfangen, da ich mit einem anderen Programm zeilenweise auslese.

Ich muß quasie die XML Datei für die weitere Verarbeitung vorbereiten.

Mit anderen Worten:
<a>a</a><b>b</b><c>c</c>

sollte umgewandelt werden in:
<a>a</a>
<b>b</b>
<c>c</c>

Gruß,
Eddy
 

zerix

Hausmeister
Moderator
Na das hast du nicht erwähnt.

Darf man fragen warum du eine XML-Datei zeilenweise auslesen möchtest? Eine XML-Datei kann man doch so sehr gut verarbeiten.

Java:
import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory;

public class XMLOutputExample
{
  /**
   * *
   * 
   * @param args
   */
  public static void main(String[] args) throws Exception
  {
    Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("C:/test.xml")); //XML-Datei in DOM-Baum einlesen


    Transformer transformer = TransformerFactory.newInstance().newTransformer(); //Transformer anlegen
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //Properties für Transformer setzen
    transformer.setOutputProperty(OutputPropertiesFactory.S_KEY_INDENT_AMOUNT, "1");
    transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("C:/test.txt"))); //XML-Datei transformieren - Datei schreiben
  }
}

MFG

Sascha
 

Eddymaniac

Erfahrenes Mitglied
Ich wollte auch erst die Datei selbst mit Java direkt auslesen. Allerdings habe ich für das zeilenweise Auslesen bereits ein Programm fertig. Und dazu kommt noch, dass die Tags dieses XML Files selbst für meine "Leihenhaften" Kenntnisse nicht XML konform sind. Konkret heißt das, dass die XML Tags selbst das Objekt beschreiben, statt dies über Attribute zu lösen. Beispiel:

<kunde1>12345</kunde1>
<kunde2>54321</kunde2>

Statt:

<field name="kunde1">12345</field>
<field name="kunde2">54321</field>

Ich hoffe das ist ein wenig verständlich.

Könntest du ein paar Kommentare in dein Programm schreiben, damit ich es besser verstehe und nachvollziehen kann?

Gruß
Eddy