2017-03-06 4 views
0

私の目的は、カスタムオブジェクトでXMLの構造を作り直し、それをさらに操作することです。実際には、XMLを入力として使用し、出力としてLaTeXを生成したいと考えています。この作業のために、私はJAXBライブラリの原則を実装しました。しかし、これは良い考えではないと思ってください。なぜならTeXの出力として必要なドキュメント構造を保持することは便利ではないからです。ここでJavaでのオブジェクトを介したナビゲーション

は私のカスタムクラスの例である:

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; 
    } 

} 

だから私は、セクションのクラスのリストを持っているタイトルを持っている、パラグラフ(パー)のリストと、サブセクションのリスト(SubSec)(LaTeXの記事を簡素化構造)。パラグラフにはテキストが含まれますが、サブセクションにはパラグラフのリストも含めることができます。 XML入力後、すべてのデータをオブジェクト、このクラスのインスタンスに転送します。一例として、

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(); 
     } 
    } 
} 

問題は、私はステージカスタムオブジェクト上の文書の構造を再作成することができないこと、である - > TeXの。構造はステージXML - カスタムオブジェクト上に保持されますが。オブジェクトモデルでは、私は、例えば、持っている:

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) 

は、この順序を保存し、ファイルに書き込むように同じ順序で値を取得する方法はありますか? getterとsetterで値を取得することは問題ではなく、適切な順序で検索することが問題です。問題を明確にするために

更新 は、すべてのセクションは、特定の順序でパラグラフ(パー)、サブセクション(SubSec)、表、図が含まれているとします。しかし明らかにJavaは、List<SubSec, Par, Table, Fig>のようなリストを作ることを許さない。特定の順序で情報を置くことはできますが、取り出すことはできません。または私はできますか?

+1

あなたはJavaでこれをやりたいのですか?通常、混合コンテンツの処理はXSLTやXQueryのほうがはるかに簡単です。新しい言語を学習したくない場合は、JDOMやXOMなどの汎用オブジェクトモデルを使用してください。 –

+0

問題は、XMLを独自のマークアップでLaTeXテキスト形式に変換することです。 XMLとは非常に異なっています。私の同僚は、さまざまなXMLとHTMLの間の変換のためにXSLTを書きました。 Javaの場合、PatternとMatcherを使って解析するための小さな作業しかありませんでした。しかし、LaTeXに変換するためには、XSLTはあまりパワーがありません。たとえば、大きな問題は、この言語では非常に異なり、ハードコーディングが必要なテーブルです。 – Vitaliy

+0

XSLTについて誰が話しているのか分かりませんでした。 – Vitaliy

答えて

1

SubSec、Par、Table、およびFigがすべてサブクラスである親クラス、たとえばDocumentComponentを作成し、ドキュメントがDocumentComponentsの順序付きリストであると言うことができますか?

+0

Sectionに含まれるすべてのクラスを1つだけ作成し、他のクラスをこの親クラスに拡張することを意味しますか?それは意味をなさない、試してみる。 – Vitaliy

+0

アドバイスありがとうございます。これを採用し、クラス継承の回避策をとった後、私は最終的にObjectで作業し、Java DOMライブラリやXMLのようにLaTeXに書き込むことができます:) – Vitaliy

関連する問題