2017-03-06 52 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; 
    } 

} 

所以我有科類,它有標題,段落(PAR)和小節的列表(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獲取值對我來說不是問題,要按正確的順序檢索它們。

更新 爲了澄清這個問題,讓我們再假定每個部分包含一定的順序段(PAR),第(SubSec),表,圖。但是顯然Java不允許創建如下列表:List<SubSec, Par, Table, Fig>。我可以按某種順序在那裏放置信息,但不能檢索。或者我可以嗎?

+1

你確定你想在Java中做到這一點嗎?處理混合內容通常在XSLT或XQuery中更容易,或者如果您不想學習新語言,請使用通用對象模型,如JDOM或XOM。 –

+0

問題是,我將XML轉換爲LaTeX - 帶有自己標記的文本格式。它與XML非常不同。我的同事成功編寫了XSLT,用於在不同的XML和HTML之間進行轉換。對於Java來說,使用模式和匹配器進行解析只需要很少的工作。但是對於轉換成LaTeX XSLT沒有太大的實力。例如,最大的問題是表格,這些語言有很大不同,需要硬編碼。 – Vitaliy

+0

沒有意識到和誰談論XSLT :) – Vitaliy

回答

1

它是否會生成一個父類,比如DocumentComponent,其中SubSec,Par,Table和Fig都是子類,然後說文檔是DocumentComponents的有序列表?

+0

你的意思是隻爲所有的類創建一個包含在Section中的類,並讓其他類擴展這個父類?這是有道理的,會嘗試。 – Vitaliy

+0

感謝您的建議。採用這種方法和類繼承的解決方法後,我終於可以使用Objects並將它們寫入LaTeX,就像使用Java DOM庫和XML一樣:) – Vitaliy