简体   繁体   中英

getting the node attribute of an XML file with LXML parsing

I cant get my mind around this nor working properly:

data='''<?xml version="1.0" encoding="UTF-8"?>\n<div type="docs" xml:base="/kime-api/prod/api/emi/2" xml:lang="ja" xml:id="39532e30"> <div n="0001" type="doc" xml:id="_5738d00002"></div></div>'''

parser = etree.XMLParser(resolve_entities=False, strip_cdata=False, recover=True, ns_clean=True)
 
# I tried with and without this following line
#data = data.replace('<?xml version="1.0" encoding="UTF-8"?>','')

XML_tree = etree.fromstring(data.encode() , parser=parser)
lang = XML_tree.xpath('.//div[@xml:lang]')
lang

lang is an empty list and there is ONE element like: xml:lang="ja" in the XML.

What am I doing wrong please?

XML_tree represents the root element (the <div> with an xml:lang attribute).

If you want to get the language, use the following:

lang = XML_tree.xpath('@xml:lang')

You could just do xpath(@xml:lang) .

XML_tree = etree.fromstring(data.encode() , parser=parser)
lang = XML_tree.xpath('@xml:lang')
print(lang)
Output:

['ja']

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM