XML解析特定值-Python
我一直在尝试解析xml文件列表。我想打印特定的值,例如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文件列表等。但是下面的功能是打印相关值。我正试图实现这一点,正如本文所建议的。然而,我显然做了一些不正确的事情,因为我得到的错误表明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