通过python xpath获取android清单元数据值
我得到:通过python xpath获取android清单元数据值,python,xpath,Python,Xpath,我得到: import lxml.etree as ET import os ns='{http://schemas.android.com/apk/res/android}' nametag=ns+'name' categorytag='category' packagetag='package' class XmlParser: def __init__(self, file): self.file = file self.tree = None
import lxml.etree as ET
import os
ns='{http://schemas.android.com/apk/res/android}'
nametag=ns+'name'
categorytag='category'
packagetag='package'
class XmlParser:
def __init__(self, file):
self.file = file
self.tree = None
self.root = None
def __parse(self):
if self.tree is None or self.root is None:
parser = ET.XMLParser(strip_cdata=False)
self.tree = ET.parse(self.file, parser)
self.root = self.tree.getroot()
def gettree(self):
self.__parse()
return self.tree
def getroot(self):
self.__parse()
return self.root
def get_meta_data(parser):
tree = parser.gettree()
#value = tree.xpath('/manifest/application//meta-data[@*=\'OTA_TYPE\']/@*[2]')
NS = {'android' : 'http://schemas.android.com/apk/res/android'}
value = tree.xpath('/manifest/application/meta-data[@a:name=\'OTA_TYPE\']/@a:value', namespace=NS)
print '%s' %(value)
return value
if __name__ == '__main__':
file = os.environ['PYTHON_ARG']
parser = XmlParser(file)
meta_data = get_meta_data(parser)
print '%s' %(meta_data)
应用
我不希望括号中有引号。树的
参数xpath
是名称空间
,而不是名称空间
。因此:
value = tree.xpath('/manifest/application//meta-data[@*=\'OTA_TYPE\']/@*[2]')
还要注意,您在
NS
字典中使用了android
键,但在查询中使用了a:
。上面的示例更正了字典,使其与您正在使用的前缀匹配。树的参数。xpath
是名称空间
,而不是名称空间
。因此:
value = tree.xpath('/manifest/application//meta-data[@*=\'OTA_TYPE\']/@*[2]')
NS = {'a' : 'http://schemas.android.com/apk/res/android'}
value = tree.xpath('/manifest/application/'
'meta-data[@a:name=\'OTA_TYPE\']/@a:value',
namespaces=NS)
还要注意,您在
NS
字典中使用了android
键,但在查询中使用了a:
。上面的示例更正了字典,使其与您使用的前缀匹配。您是对的,但它仍然打印['daily\u build\u test',我发现了原因,即:value是一个列表,NS={'a':'}value=tree.xpath('/manifest/application/''meta data[@a:name=\'OTA\u TYPE\']/@a:value',namespaces=NS)value[0]是我想要的。你是对的,它仍然打印['daily\u build\u test',我找到了原因,那就是:value是一个列表,NS={'a':'}value=tree.xpath('/manifest/application/''meta data[@a:name=\'OTA\u TYPE\']/@a:value',namespaces=NS)value[0]这就是我想要的。
NS = {'a' : 'http://schemas.android.com/apk/res/android'}
value = tree.xpath('/manifest/application/'
'meta-data[@a:name=\'OTA_TYPE\']/@a:value',
namespaces=NS)
Thanks to larsks, I finally get I want by:*
def get_meta_data(parser):
tree = parser.gettree()
NS = {'a' : 'http://schemas.android.com/apk/res/android'}
value = tree.xpath('/manifest/application/meta-data[@a:name=\'OTA_TYPE\']/@a:value', namespaces=NS)
print '%s' %(value[0])
# NOTE value is a list of length 0.
return value[0]