【发布时间】:2017-03-06 14:38:16
【问题描述】:
我的目标是在自定义对象中重新创建 XML 的结构以进一步使用它。实际上,我希望将 XML 作为输入并生成 LaTeX 作为输出。对于这个任务,我已经实现了 JAXB 库的原理。但不要认为这是一个好主意,因为在 TeX 中保留所需的文档结构作为输出并不方便。
这是我的自定义类的示例:
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;
}
}
所以我有一个 Section 类的列表,其中包含标题、段落列表 (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>。我可以按特定顺序将信息放在那里,但不能检索。或者我可以吗?
【问题讨论】:
-
您确定要在 Java 中执行此操作吗?在 XSLT 或 XQuery 中处理混合内容通常要容易得多,或者如果您真的不想学习一门新语言,请使用通用对象模型,例如 JDOM 或 XOM。
-
问题是,我将 XML 转换为 LaTeX - 带有自己标记的文本格式。它与 XML 非常不同。我的同事已经成功编写了 XSLT,用于在不同的 XML 和 HTML 之间进行转换。对于 Java,使用 Pattern 和 Matcher 进行解析的工作量很小。但是对于转换为 LaTeX XSLT 并没有太大的力量。例如,最大的问题是表格,这些语言在这些语言中非常不同,需要硬编码。
-
不知道和谁谈论 XSLT :)
标签: java xml object arraylist latex