我需要一些非常简单的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应该允许传递子函数,或者是另一个父函数或子函数。无论我看多少,我都无法弄清楚为什么它会按原样打印。
答案 0 :(得分: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)