Мой XML файл:
<xml xmlns="http://www.myweb.org/2003/instance" xmlns:link="http://www.myweb.org/2003/linkbase" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:iso4217="http://www.myweb.org/2003/iso4217" xmlns:utr="http://www.myweb.org/2009/utr"> <link:schemaRef xlink:type="simple" xlink:href="http://www.myweb.com/form/2020-01-01/test.xsd"></link:schemaRef>
Я хочу получить URL: http://www.myweb.com/folder/form/1/2020-01-01/test.xsd из тега <link:schemaRef>.
http://www.myweb.com/folder/form/1/2020-01-01/test.xsd
<link:schemaRef>
Мой код ниже python находит <link:schemaRef> тег. Но я не могу получить URL.
from lxml import etree with open(filepath,'rb') as f: file = f.read() root = etree.XML(file) print(root.nsmap["link"]) #http://www.myweb.org/2003/linkbase print(root.find(".//{"+root.nsmap["link"]+"}"+"schemaRef"))
Попробуйте и посмотрите, работает ли он:
for i in root.xpath('//*/node()'): if isinstance(i,lxml.etree._Element): print(i.values()[1])
Вывод:
http://www.myweb.com/form/2020-01-01/test.xsd
Использование:
>>> child = root.getchildren()[0] >>> child.attrib {'{http://www.w3.org/1999/xlink}type': 'simple', '{http://www.w3.org/1999/xlink}href': 'http://www.myweb.com/form/2020-01-01/test.xsd'} >>> url = child.attrib['{http://www.w3.org/1999/xlink}href']
Однако я считаю, что проблема заключается в том, знаете ли вы, какой правильный ключ (т. Е. {http://www.w3.org/1999/xlink}href) используется. Если это проблема, то нам просто нужно:
{http://www.w3.org/1999/xlink}href
>>> print(root.nsmap['xlink']) # Notice that the requested url is a href to the xlink 'http://www.w3.org/1999/xlink' >>> key_url = "{"+key_prefix+"}href" >>> print(child.attrib[key_url]) 'http://www.myweb.com/form/2020-01-01/test.xsd'