2017-03-06 6 views
0

Mein Ziel ist es, die Struktur von XML in benutzerdefinierten Objekten neu zu erstellen, um damit weiter zu arbeiten. Eigentlich möchte ich XML als Eingabe haben und LaTeX als Ausgabe erzeugen. Für diese Aufgabe habe ich Prinzipien der JAXB-Bibliothek implementiert. Aber denken Sie nicht, dass dies eine gute Idee ist, weil es nicht bequem ist, die benötigte Dokumentstruktur als Ausgabe in TeX zu behalten. HierNavigation durch Objekte in Java

ist ein Beispiel für meine eigene Klasse:

public class Section { 

    private String title; 
    private List<Par> par; 
    private List<SubSec> subsec; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = "\\section {" + title + "}"; 
    } 


    public List<Par> getPar() { 
     if (par == null) { 
      par = new ArrayList<Par>(); 
     } 
     return this.par; 
    } 

    public List<SubSec> getSubSec() { 
     if (subsec == null) { 
      subsec = new ArrayList<SubSec>(); 
     } 
     return this.subsec; 
    } 

} 

So habe ich eine Liste von Section-Klasse, die Titel haben, die Liste der Absätze (Par) und die Liste der Unterabschnitte (subsec) (vereinfacht LaTeX Artikel Struktur). Absätze enthalten Text, aber Abschnitt kann auch eine Liste von Absätzen enthalten. Nach der XML-Eingabe übertrage ich alle Daten davon in Objekte, Instanzen dieser Klassen.

Als Beispiel:

List<Section> listSections = new ArrayList<Section>(); 

// omitting the actions to recreate the structure and set values to Objects 
// now, to retrieve and write: 

for (int j = 0; j < listSections.size(); j++) { 
    List<Par> listParText = listSections.get(j).getPar(); 
    writer.write(listSections.get(j).getTitle()); 
    writer.newLine(); 
    for (Par parList : listParText) { 
     if (parList.getText() != null) { 
      writer.write(parList.getText()); 
      writer.newLine(); 
     } 
    } 
} 

Das Problem ist, dass ich nicht die Struktur des Dokuments auf der Bühne benutzerdefinierten Objekte neu erstellen kann -> TeX. Obwohl die Struktur auf der Bühne XML - benutzerdefinierte Objekte beibehalten wird. In Objekten Modell Ich habe zum Beispiel:

Section1(title): Par(text), Par(text), Par(text) 
Section2(title): Subsection1(title): Par(text), Par(text), Par(text) 
       Subsection2(title): Par(text), Par(text) 
Section3(title): Par(text) 

Gibt es eine Möglichkeit, diese zu speichern und den Wert in der gleichen Reihenfolge erhalten, um sie zu schreiben einreichen? Get Werte mit Getter und Setter ist kein Problem für mich, Problem, sie mit der richtigen Reihenfolge abrufen.

aktualisiert das Problem zu klären, läßt jeden Abschnitt enthält Absätze (Par) suppose, Absatz (Abs), Tabellen, Abbildungen in bestimmten Reihenfolge. Aber offensichtlich erlaubt Java nicht, eine Liste wie zu machen: List<SubSec, Par, Table, Fig>. Ich kann Informationen dort in bestimmter Reihenfolge, aber nicht abrufen. Oder kann ich?

+1

Sind Sie sicher, dass Sie dies in Java tun möchten? Die Handhabung gemischter Inhalte ist in XSLT oder XQuery normalerweise viel einfacher. Wenn Sie wirklich keine neue Sprache lernen möchten, verwenden Sie ein generisches Objektmodell wie JDOM oder XOM. –

+0

Das Problem ist, dass ich XML in LaTeX umwandeln - Textformat mit eigenem Markup. Es unterscheidet sich sehr von XML. Mein Kollege hatte erfolgreich XSLT geschrieben, um zwischen verschiedenen XMLs und HTMLs zu transformieren. Für Java gab es nur wenig Arbeit zum Parsen mit Pattern und Matcher. Aber für die Transformation zu LaTeX hat XSLT nicht viel Power. Das große Problem sind beispielsweise Tabellen, die in diesen Sprachen sehr unterschiedlich sind und eine harte Codierung erfordern. – Vitaliy

+0

Wusste nicht, mit wem über XSLT sprechen :) – Vitaliy

Antwort

1

Würde es funktionieren, eine Elternklasse zu erstellen, sagen DocumentComponent, von der SubSec, Par, Table und Fig alle Unterklassen waren, und dann sagen, dass ein Dokument eine geordnete Liste von DocumentComponents ist?

+0

Sie meinen, machen Sie nur eine Klasse für alle, die in Abschnitt enthält, und andere andere Klassen erweitern diese Elternklasse? Es macht Sinn, wird es versuchen. – Vitaliy

+0

Danke für den Rat. Nach der Übernahme dieser und Workaround mit der Klassenvererbung kann ich endlich mit Objekten arbeiten und sie in LaTeX schreiben, wie mit Java DOM Bibliothek und XML :) – Vitaliy