XML解析特定值-Python

XML解析特定值-Python,python,xml,Python,Xml,我一直在尝试解析xml文件列表。我想打印特定的值,例如用户名值 我的脚本可以很好地收集xml文件列表等。但是下面的功能是打印相关值。我正试图实现这一点,正如本文所建议的。然而,我显然做了一些不正确的事情,因为我得到的错误表明elm对象没有属性text。任何帮助都将不胜感激 当前代码 from lxml import etree as ET def read_files(files): for fi in files: doc = ET.parse(fi)

我一直在尝试解析xml文件列表。我想打印特定的值,例如
用户名


我的脚本可以很好地收集xml文件列表等。但是下面的功能是打印相关值。我正试图实现这一点,正如本文所建议的。然而,我显然做了一些不正确的事情,因为我得到的错误表明
elm
对象没有属性
text
。任何帮助都将不胜感激

当前代码

from lxml import etree as ET

def read_files(files):
    for fi in files:
        doc = ET.parse(fi)
        elm = doc.find('userName')
        print elm.text

userName
是一个属性,而不是元素。属性根本没有附加文本节点

for el in doc.xpath('//*[@userName]'):
  print el.attrib['userName']

doc.find
查找具有给定名称的标记。您正在查找具有给定名称的属性

elm.text
给您一个错误,因为
doc.find
找不到任何标记,所以它返回
None
,该属性没有
text
属性

进一步阅读lxml.etree文档,然后尝试以下操作:

doc = ET.parse(fi)
root = doc.getroot()
prop = root.find(".//Properties") # finds the first <Properties> tag anywhere
elm = prop.attrib['userName']
doc=ET.parse(fi)
root=doc.getroot()
prop=root.find(“.//Properties”)#在任意位置查找第一个标记
elm=prop.attrib['userName']

您可以尝试使用标记名获取元素,然后尝试获取其属性(
用户名
属性
的属性):


嗯??属性挂起的不是根。你说得很对,我修复了我的答案,改为查找
Properties
标记的属性。你能解释一下
/*[@userName]
值吗?我想了解如何添加多个属性。@iNoob,您应该阅读
etree
文档,了解如何使用类似XPath的规范来查找具有特定属性的标记:@DanLenski,…哦,这是一个公平的反对意见——我在这里使用的是真实的XPath;实际上,我使用的是
lxml.etree
,而不是标准的library ElementTree。@DanLenski,…实际上,重读这个问题,OP使用的是lxml.etree,所以这实际上是一个公平的选择。:)@在inob中,
@userName
的意思是“拥有一个名为userName的属性”<代码>/执行递归搜索<代码>*匹配具有任何名称的元素。也就是说,如果您知道具有所需属性的元素将始终被称为属性,那么您不需要搜索它具有哪些属性。
from lxml import etree as ET

def read_files(files):
    for fi in files:
        doc = ET.parse(fi)
        props = doc.getElementsByTagName('Properties') 
        elm = props[0].attributes['userName']
        print elm.value