【问题标题】:How do I parse XML results into an array?如何将 XML 结果解析为数组?
【发布时间】:2012-11-14 05:11:55
【问题描述】:

我是 Python 新手,需要一些帮助。网络不是很有帮助。简单地说,我有一个如下所示的网络响应:

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

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

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

等等……

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

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

【问题讨论】:

    标签: python xbmc


    【解决方案1】:

    如果您正在做类似的简单事情,您可能需要查看 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)  
    

    【讨论】:

      【解决方案2】:

      到目前为止,从 HTML 中提取信息的最简单方法是 BeautifulSoup。这是获取您想要的列表的 sn-p:

      >>> 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 来自 bs4 模块的 BeautifulSoup 类(您需要安装它 - 请参阅上面的链接)。
      2. 我们从html_text 创建一个名为soupBeautifulSoup 实例。
      3. 我们使用列表推导式创建一个名为fields 的列表:
        • eltext 转换为integer
        • for每个el
        • 我们通过在soup 中找到所有field 元素得到

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          看看标准模块! 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']"
          

          对不起我的英语

          【讨论】:

          • 正则表达式是notoriously 解析 HTML 的脆弱方式......而这个答案依赖于响应中根本没有其他内容,这似乎不太可能。
          • @ZeroPiraeus 我说的是if you need for ONLY THIS CASE。当然,RE 对 xml 不利,但我相信 KISS。如果有简单的方法来做某事,为什么还要安装怪物模块?
          猜你喜欢
          • 2015-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-09
          • 1970-01-01
          • 2018-08-25
          • 2011-08-28
          • 2021-03-13
          相关资源
          最近更新 更多