【发布时间】:2009-04-15 13:01:18
【问题描述】:
解决这个问题最有效的方法是什么: 我遍历了一个 XML 文件并创建了以下一组链接(字符串)列表:
- a > b > c
- a > b > d
- a > f > [i]
现在我正在尝试将 XML 重建为其原始结构:
<a>
<b>
<c/><d/>
</b>
<f>i</f>
</a>
任何帮助将不胜感激!
【问题讨论】:
解决这个问题最有效的方法是什么: 我遍历了一个 XML 文件并创建了以下一组链接(字符串)列表:
现在我正在尝试将 XML 重建为其原始结构:
<a>
<b>
<c/><d/>
</b>
<f>i</f>
</a>
任何帮助将不胜感激!
【问题讨论】:
您可能不想为此使用列表作为数据结构。您最好创建一个 Node 类型或类似的东西,它可以包含文本和子节点,以便您可以将数据存储在节点的树/层次结构中。像这样简单的东西应该可以解决问题:
public class Node {
private String text;
private List<Node> children = new ArrayList<Node>();
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List<Node> getChildren() {
return children;
}
}
当您读入文件时,创建这些Nodes 的树并使用相同的结构将其写回应该很简单。
【讨论】:
您需要存储有关原始 XML 结构的更多信息。例如,这 3 个列表没有关于子节点顺序的信息。
【讨论】:
我会使用树数据结构来保存第一步中的元素(就像 matt 解释的 here)。
你的表示我不清楚,你如何区分标签和元素?由于i 与标签在同一个列表中,但不是标签。
【讨论】:
Set 不保留文档顺序。您希望以基于范围的表格编码 (pre/post/size/level/kind) 或类似的方式跟踪树结构,基于前缀的模式,如 ORDPATH 或基于指针,例如 parent/leftsibl/rightsibl/firstchild/node-encoding .
【讨论】: