Python如何从XML(如Unicode)中获取列表?

时间:2015-11-26 15:45:43

标签: python xml list unicode

我在阅读XML时遇到了问题。我想得到一个2D数组。但是,当我从XML获取数据时,数据类型是Unicode。因此,我键入使用list()。但是,结果不是我想要的。我可以使用其他方式获取2D列表吗?

如何删除u,\ n,\ t并获得正确答案?谢谢。

  

abc.xml

<text>
    <item id="1">
        [[2, 2, 1],
        [1, 0, 0],
        [1, 0, 0]]
    </item>  
</text>

PYTHON:

import  xml.dom.minidom

dom = xml.dom.minidom.parse('abc.xml')

bb = dom.getElementsByTagName('item')
b=bb[0]

l= b.firstChild.data
print l

a=list(l)
print a

OUTPUT:

[[2, 2, 1]
 [1, 0, 0] 
 [1, 0, 0]]

[u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'[', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'\t', u'[', u'2', u',', u' ', u'2', u',', u' ', u'1', u']', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'\t', u'[', u'1', u',', u' ', u'0', u',', u' ', u'0', u']', u' ', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'\t', u'[', u'1', u',', u' ', u'0', u',', u' ', u'0', u']', u' ', u'\n', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u']', u'\n', u' ', u' ', u' ', u' ', u'\t']
[Finished in 0.1s]

3 个答案:

答案 0 :(得分:1)

这个问题与旧问题非常相似:Convert string representation of list to list in Python

简而言之,您希望解析一个unicode字符串(u"[\n[1,2,3],\n...")到python列表文字中,所以你想做同样的事情python解释器在读取和解析时做的事情程序

您可以使用ast模块:

import ast
a=ast.literal_eval(l)

在你的情况下。请注意,此函数将评估任何 python文字,因此如果您只是将"1"放入xml中,则结果a将为数字1

有关详细说明,请参阅documentation for ast.literal_evel

答案 1 :(得分:1)

有点hacky但适合你的情况:

import ast
from lxml import html

text = """<text>
    <item id="1">
        [
            [2, 2, 1]
            [1, 0, 0] 
            [1, 0, 0] 

        ]
    </item>  
</text>"""

tree = html.fromstring(text)
data = ast.literal_eval(''.join([x.strip() for x in tree.xpath('//text/item[@id="1"]/text()')[0].replace('\n', '').replace(']','],').strip() if x.strip() !=""]).strip())[0]

print type(data)
print data

<强>输出:

<type 'list'>
[[2, 2, 1], [1, 0, 0], [1, 0, 0]]

答案 2 :(得分:0)

您可以使用映射将unicode转换为字符串:

new_list = map(str, old_list)