Как мне избежать косой черты в запросе xpath? Мои теги содержат URL, поэтому я должен быть в состоянии сделать это. Я использую lxml в Python.
Или же xpath может запросить подстроку пути? Примеры ниже:
xml=""" <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsa="http://schemas.google.com/gsa/2007"> <gsa:content name="reportName">bbb</gsa:content> <gsa:content name="collectionName">default_collection</gsa:content> <gsa:content name="reportDate">date_3_25_2009</gsa:content> </entry> """
Когда я запускаю следующее:
tree=fromstring(xml) for elt in tree.xpath('//*'): elt.tag
Возвращает:
'{http://www.w3.org/2005/Atom}entry' '{http://schemas.google.com/gsa/2007}content' '{http://schemas.google.com/gsa/2007}content' '{http://schemas.google.com/gsa/2007}content'
Запуск tree.xpath('/entry') возвращает пустой список.
tree.xpath('/entry')
Мне нужно иметь возможность либо запросить '{http://www.w3.org/2005/Atom}entry' в качестве тега, либо запросить' entry 'в любом месте тега.
Просмотр namespace prefixes [документы] .
namespace prefixes
Если вы хотите элемент, который находится в пространстве имен http://schemas.google.com/gsa/2007, вы должны искать его следующим образом:
http://schemas.google.com/gsa/2007
import lxml.etree as et xml=""" <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsa="http://schemas.google.com/gsa/2007"> <gsa:content name="reportName">bbb</gsa:content> <gsa:content name="collectionName">default_collection</gsa:content> <gsa:content name="reportDate">date_3_25_2009</gsa:content> </entry> """ NS = {'rootns': 'http://www.w3.org/2005/Atom', 'gsa': 'http://schemas.google.com/gsa/2007'} tree = et.fromstring(xml) for el in tree.xpath('//gsa:content', namespaces=NS): print el.attrib['name'] print len(tree.xpath('//rootns:entry', namespaces=NS))