如何将XML结果解析为数组?

时间:2012-11-14 05:11:56

标签: python xbmc

我是Python的新手,需要一些帮助。网络不是很有帮助。简而言之,我的网络响应如下:

<html>
  <field>123</field>
  <field>456</field>
</html>

我要做的是将字段元素中的所有内容都放入一个可以索引的数组中。最终结果如下:

myArray[0] = 123
myArray[1] = 456

依旧......

我最终要做的就是运行一个随机数生成器来随机选择这个数组中的一个元素并检索它的值。

这可能吗?我似乎无法在网上找到一个直接的答案,所以我觉得我可能会问错了。

4 个答案:

答案 0 :(得分:6)

如果你正在做这样简单的事情,你可能想看看python中内置的ElementTree模块。你不需要额外安装任何东西,它们都包含在python

import xml.etree.ElementTree as ET

filename='data.txt'
tree = ET.parse(filename)
root = tree.getroot()
myArray=[]

for x in root.findall('field'):
    myArray.append(x.text)

print(myArray)  

答案 1 :(得分:1)

我会使用XPath Xpath python来解析值,只需将它们插入列表中,首先声明并清空列表my_list=[],然后只追加值my_list.append(parsed_value)

答案 2 :(得分:1)

到目前为止,从HTML中提取信息的最简单方法是BeautifulSoup。这是获取所需列表的代码段:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html_text)
>>> fields = [int(el.text) for el in soup.find_all("field")]
>>> fields
[123, 456]

因为你是Python的新手:

  1. 我们import来自BeautifulSoup模块的bs4课程(您需要安装它 - 请参阅上面的链接)。
  2. 我们从BeautifulSoup创建了一个名为soup的{​​{1}}个实例。
  3. 我们使用列表解析创建一个名为html_text的列表:
    • fields text转换为el eger
    • 每个int
    • for
    • 通过查找el
    • 中的所有field元素获得

答案 3 :(得分:-2)

看看标准模块! http://docs.python.org/2/library/htmlparser.html#examples

如果您只需要问题,请尝试此操作 它用' '(空格)替换所有标记,str.split将结果文本拆分为一个或多个空格作为分隔符

import re
def get_data(str_data):
    return re.sub(r'<.*?>',' ', str_data).split()

str_data = """<html>
  <field>123</field>
  <field>456</field>
</html>"""

print get_data(str_data) # prints "['123', '456']"

抱歉我的英文