python lxml如何将文本属性的引用作为值添加到列表中

python lxml如何将文本属性的引用作为值添加到列表中,python,lxml,Python,Lxml,我使用objectify解析了一个xml对象: <sources> <source type="IP"> <id>1000</id> <ip_address>100.100.1.11</ip_address> <netmask>255.255.255.255</netmask> <cidr>32</cidr> </source>

我使用objectify解析了一个xml对象:

<sources>
  <source type="IP">
    <id>1000</id>
    <ip_address>100.100.1.11</ip_address>
    <netmask>255.255.255.255</netmask>
    <cidr>32</cidr>
  </source>
</sources>
我得到一个引用了
xml
对象的列表,而不是字符串列表。使用以下代码打印列表中的对象时:

if source.get('type') == 'IP':
    source_lst.append(source.ip_address.text)+'/'+str(source.cidr)
for x in i.sources:
    print x
我没有得到任何回报。但是使用
etree.tostring

  for x in i.sources:
        print etree.tostring(x)
它显示了完整的XML对象:

<source xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="IP"><id>989</id><ip_address>100.100.1.10</ip_address><netmask>255.255.255.255</netmask><cidr>32</cidr></source>
通过“print mystring”,我得到了这一行:

100.100.1.10/32
但是当我试图打印列表中的项目时,仍然会得到xml对象而不是字符串

我发现了问题。这部分代码并不适用。
问题可以删除。

我无法回答为什么您的代码不起作用,因为它不是一个完整的示例。但我相信您希望从示例XML构建一个
ipaddr/cidr
字符串列表。下面是一些
lxml
代码,用于扫描源记录并将它们作为
ipadd/cidr
字符串附加到列表中:

Python代码:

from lxml import etree

source_lst = []
sources = etree.fromstring(my_xml)
for source in sources.findall("source[@type='IP']"):
    ip_address = source.findtext('ip_address')
    cidr = source.findtext('cidr')
    source_lst.append(ip_address + '/' + cidr)

print(source_lst)
my_xml = """
    <sources>
      <source type="IP">
        <id>1000</id>
        <ip_address>100.100.1.11</ip_address>
        <netmask>255.255.255.255</netmask>
        <cidr>32</cidr>
      </source>
      <source type="IPx">
        <id>1000</id>
        <ip_address>100.100.1.12</ip_address>
        <netmask>255.255.255.0</netmask>
        <cidr>24</cidr>
      </source>
      <source type="IP">
        <id>1000</id>
        <ip_address>100.100.1.13</ip_address>
        <netmask>255.255.255.0</netmask>
        <cidr>24</cidr>
      </source>
    </sources>
"""
['100.100.1.11/32', '100.100.1.13/24']
示例数据:

from lxml import etree

source_lst = []
sources = etree.fromstring(my_xml)
for source in sources.findall("source[@type='IP']"):
    ip_address = source.findtext('ip_address')
    cidr = source.findtext('cidr')
    source_lst.append(ip_address + '/' + cidr)

print(source_lst)
my_xml = """
    <sources>
      <source type="IP">
        <id>1000</id>
        <ip_address>100.100.1.11</ip_address>
        <netmask>255.255.255.255</netmask>
        <cidr>32</cidr>
      </source>
      <source type="IPx">
        <id>1000</id>
        <ip_address>100.100.1.12</ip_address>
        <netmask>255.255.255.0</netmask>
        <cidr>24</cidr>
      </source>
      <source type="IP">
        <id>1000</id>
        <ip_address>100.100.1.13</ip_address>
        <netmask>255.255.255.0</netmask>
        <cidr>24</cidr>
      </source>
    </sources>
"""
['100.100.1.11/32', '100.100.1.13/24']