У меня есть строка XML, которую я беру из веб-службы wsdl. Я попытался разобрать его с помощью элемента elementTree, но он предназначен только для файлов. Я попытался сохранить его в файле, чтобы его разобрать, но он говорит, что у меня нет разрешения на открытие файла. Таким образом, я использовал это решение, которое я нашел в StackOverflow:Разбор XML-строки с python
try:
queryresult = client.service.executeQuery(query)
except WebFault, e:
print e
tree = ET.ElementTree(ET.fromstring(queryresult))
rootElem = tree.getroot()
result = rootElem.findall(".//result")
, но когда я печатаю результат я беру значение, как «результат» Элемента на 0x7f6e454bdb90
Я также попытался напечатать
result.text
или
for s in result:
test = s.attrib
и в результате = rootElem.findall (".// результат") я также попробовал результат = РОО tElem.findall («результат») или результат = rootElem.findall («результаты/результат»)
Это строка XML (я добавил только часть его, потому что он слишком велик):
<?xml version="1.0" encoding="UTF-8"?> <sparql> <head> <variable name="id"/> <variable name="code"/> <variable name="title"/> <variable name="text"/> <variable name="substanceCode"/> <variable name="patientId"/> <variable name="birthTime"/> <variable name="effectiveTime_start"/> </head> <results> <result> <binding name="id"> <literal>df868fff-9d48-11e2-8ee8-833b8491ffe6</literal> </binding> <binding name="code"> <literal>2000</literal> </binding> <binding name="title"> <literal>Administration of substance (procedure)</literal> </binding> <binding name="text"> <literal>Aclarubicin (product)</literal> </binding> <binding name="substanceCode"> <literal>326830005</literal> </binding> <binding name="patientId"> <literal>fictitious1</literal> </binding> <binding name="birthTime"> <literal>1965-03-01T00:00:00.0</literal> </binding> </result>
Я также попытался @alecxe решение:
def index(request,requestresult):
data = requestresult
tree = ET.fromstring(data)
for literal in tree.findall('.//result/binding/literal')
returnresult = literal.text
if tokens_p(request):
account_id = urllib.unquote(request.session['oauth_token_set']['account_id'])
return utils.render_template('ui/index', { 'ACCOUNT_ID': account_id, 'SETTINGS': settings,'returnresult':returnresult})
return HttpResponseRedirect(reverse(login))
И тогда я напечатал результаты {{returnresult}} в index.html, но ничего не печатает. Тогда я попробовал:
tree = ET.ElementTree(ET.fromstring(data))
rootElem = tree.getroot()
returnresult = rootElem.findall('.//results/result/binding/literal')
и печатает элемент «буквального» в 0x7f6e4529fc10 Element «буквального» в 0x7f6e4529fc90 и т.д. И когда я пытаюсь напечатать его:
for literal in rootElem.findall('.//results/result/binding/literal')
returnresult = literal.text
У меня есть ошибка недействительной синтаксис в строке: «за буквальные в rootElem.findall („.// результаты/результат/связывание/буквальный“)»
Что вам нужно получить от узлов результата? – alecxe
значение (например, Aclarubicin) в поле. Но когда я помещаю findall (.// text), ничего не происходит –
user1431148