Выход Python вышел из строя

1

Мне нужен был очень простой XML-выход, поэтому я решил написать свои собственные функции. Это был только первый шаг, но что-то пошло ужасно неправильно. Хотя я ожидаю, что результат будет выглядеть следующим образом:

<A>
    <D>
        <I></I>
        <J></J>
        <K></K>
    </D>
    <E>
        <I></I>
        <J></J>
        <K></K>
    </E>

... и т.д.

Вместо этого вывод выглядит следующим образом:

  <I></I>
  <J></J>
  <K></K>
 <D>
 </D>
 <E>
 </E>
 <F>
 </F>
 <G>
 </G>
 <H>
 </H>
<A>
</A>
<B>
</B>
<C>
</C>

Я уверен, что моя ошибка - это что-то очень простое, но я просто не вижу этого. Это весь файл, который я использую:

def XMLChild(list, depth):
    for arg in list:
        print '\t' * depth + '<' + arg + '></' + arg + '>'

def XMLParent(list, depth, child):
    for arg in list:
        print '\t' * depth + '<' + arg + '>'
        child
        print '\t' * depth + '</' + arg + '>'

list1 = ['A', 'B', 'C']
list2 = ['D', 'E', 'F', 'G', 'H']
list3 = ['I', 'J', 'K', ]

XMLParent(list1, 0, XMLParent(list2, 1, XMLChild(list3, 2)))

Как вы можете видеть, обе функции должны печатать теги. XMLParent должен допускать передачу дочерней функции, либо другого родителя, либо ребенка. Независимо от того, насколько я смотрю на него, я не могу понять, почему он печатает так, как есть.

Теги:

1 ответ

2
Лучший ответ

Вы не возвращаете результат, а печатаете его напрямую. Поэтому он будет выводиться в порядке выполнения функций. Ваш код эквивалентен следующему, что уточняет порядок, в котором вызываются функции:

a = XMLChild(list3, 2)
b = XMLParent(list2, 1, a)
XMLParent(list1, 0, b)

Попробуйте создать строку в каждой из функций, возвращая ее вызывающему. Затем вызывающий может добавить его в свой собственный буфер и в свою очередь вернуть его. Затем вы можете вывести объединенную строку как таковую и выполнить всю печать в одном месте:

a = XMLChild(list3, 2)
b = XMLParent(list2, 1, a)
print XMLParent(list1, 0, b)
  • 0
    Ах, я понял. Я думаю, что это также сделает мой следующий шаг, чтобы изменить его для печати в файл, проще. Огромное спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню