<p>我发现了一个<a href="http://svn.pyyaml.org/pyyaml-legacy/trunk/experimental/XmlYaml/convertyaml_map.py" rel="nofollow">XML to YAML converter</a>,但我不得不在第92行做了一个小改动:</p>
<pre><code>outStr = yaml.dump(out)
</code></pre>
<p>更改为</p>
<pre><code>outStr = yaml.safe_dump(out)
</code></pre>
<p>它删除输出中的任何<code>!!python/unicode</code>标记。我已经通过shell命令行测试了这个脚本,它工作得很好;我确信这只是一个简单的转换,可以让它在Python命令行中工作。</p>
<p><strong>编辑</strong></p>
<p>我还添加了自己的打印方法,使输出更像您最初发布的内容:</p>
<pre><code>def prettyPrint(node, level):
childPrint = 0
attrPrint = 0
for x in node:
try:
if x['attributes']:
attrPrint = 1
for l in range(0, level):
sys.stdout.write("\t")
for a in x['attributes']:
sys.stdout.write("- %s: %s\n" % (a, x['attributes'][a]))
except KeyError:
try:
if x['children']:
childPrint = 1
for l in range(0, level):
sys.stdout.write("\t")
sys.stdout.write("%s:\n" % x['name'])
prettyPrint(x['children'], level+1)
except KeyError:
pass
finally:
if not childPrint:
printNextNode(x, level, attrPrint)
attrPrint = 0
else:
childPrint = 0
def printNextNode(node, level, attrPrint):
for l in range(0, level):
sys.stdout.write("\t")
if attrPrint:
sys.stdout.write(' ')
sys.stdout.write("%s: %s\n" % (node['name'], node['text']))
</code></pre>
<p>然后在<code>convertXml2Yaml</code>函数中调用:</p>
<pre><code>sys.stdout.write('%s:\n' % out['name'])
prettyPrint(out['children'], 1)
</code></pre>