代码之家  ›  专栏  ›  技术社区  ›  Sudhi

从变量中存储为字节数据类型的xml中提取特定的xml子项到python3中的列表中

  •  1
  • Sudhi  · 技术社区  · 7 年前

    我正在编写一个python脚本,希望将字节格式的输出值转换成一个变量。有两个用于循环的嵌套。第一个for循环收集租户的名称,并将其放入函数中,以获取其中的名称空间列表。这个名称空间列表是一个XML文件,以字节数据类型输出。

    下面是一个例子:

    Source = b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><namespaces><name>Namespacename1</name><name>Namespacename2</name>'
    
    import lxml
    from xml.etree import ElementTree as ET
    
    for tenant in tenants:
        c.GET('/mapi/tenants/'+tenant+'/namespaces')#This comes from another sdk so ignore this
        c.response_status # this also is part of the sdk so ignore this
        source = c.read() # This operation is also part of the sdk so ignore this as well
        print(source)
        nslist = et.fromstring(source)
    

    重点是,我需要从存储在名为source的变量中的每个xml输出(以“字节”格式)中获取许多名为“name”的子项,并且每个“name”值都必须附加到一个新的列表变量中。

    一些xml响应是空的,当我尝试循环遍历每个响应以执行此操作时,会不断收到xml解析错误。我尝试了if-else条件,试图忽略这一点。那也失败了!

    我读了很多关于xml的书。etree文档,还测试了几个循环。不幸的是,没有任何帮助。 谁能帮我整理一下吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Sudhi    7 年前

    我自己找到了问题的答案。我刚刚使用了枚举选项来解决这个问题。

    正如我在例子中提到的。我有一个字节格式的变量,包含一个xml文件。我需要xml文件中名为name的子项。我使用了名为lxml的开源模块。您还可以使用Python 3中内置的xml模块(ElementTree)。

    下面是解决方案。我有一个叫做source的变量。

    source = b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>.<namespaces><name>Building</name><name>Active</name><name>system</name></namespaces>'
    
    nsinfo = nslist.findall('name')
        for q, value in enumerate(nsinfo):
            nsname = str(value.text)
            print(nsname)
    
    Building
    Active
    System
    

    这将为您提供要查找的xml文件中的特定值。问题解决了!。

    你可以查看下面的链接来更好地理解。

    https://github.com/Solitarystate/Hitachi-Content-Platform-Capacity-Reporting/blob/master/hcpcapacityreporting_xml.py

    推荐文章