Java: пройденное дерево к дереву - PullRequest
0 голосов
/ 15 апреля 2009

Какой самый эффективный способ решить эту проблему: Я просмотрел XML-файл и создал следующий набор связанных (String) списков:

  • a> b> c
  • a> b> d
  • a> f> [i]

и сейчас я пытаюсь перестроить XML в его исходную структуру:

<a>
 <b>
  <c/><d/>
 </b>
 <f>i</f>
</a>

Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

3 голосов
/ 15 апреля 2009

Вы, вероятно, не хотите использовать списки в качестве структуры данных для этого. Возможно, вам лучше создать тип 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;
    }

}

После этого должно быть тривиально создать дерево этих Node s, когда вы читаете файл, и использовать ту же структуру, чтобы выписать его обратно.

0 голосов
/ 25 ноября 2011

Набор не сохраняет порядок документов. Вы хотите отслеживать древовидную структуру в табличной кодировке на основе диапазона (pre/post/size/level/kind) или что-то в том же направлении, схему на основе префикса, такую ​​как ORDPATH, или на основе указателей, например, кодирование parent/leftsibl/rightsibl/firstchild/node .

0 голосов
/ 15 апреля 2009

Я бы использовал древовидную структуру данных для хранения элементов на первом шаге (как объясняет Мэтт здесь ).

А ваше представление мне неясно, как вы различаете тег и элемент? Поскольку i содержится в тех же списках, что и тег, но не является тегом.

0 голосов
/ 15 апреля 2009

Вам нужно будет хранить больше информации о структуре исходного XML. Эти 3 списка не содержат информации о порядке дочерних узлов, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...