Я пытаюсь красиво распечатать результат строки xquery. Чтобы сделать красивую печать, я последовал простому примеру здесь.
Мой код выглядит следующим образом:
docb= pyproc.new_document_builder()
xdoc = docb.parse_xml(xml_text=myxml)
#xdoc = docb.parse_xml(xml_file_name="c:/temp/myxml.xml")
xqp = pyproc.new_xquery_processor()
try:
result=xqp.run_query_to_string(input_xdm_item = xdoc,query_text=xquery,lang='3.1')
root = etree.fromstring(result)
print(etree.tostring(root, pretty_print=True).decode())
except Exception as e:
print(e)
При выполнении я получаю следующую ошибку:
Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.
Единственный способ работать, если я напишу этот запутанный код:
xml = bytes(bytearray(result, encoding='utf-8'))
root = etree.XML(xml)
print(etree.tostring(root, pretty_print=True).decode())
Когда я передаю обычную строку XML, все работает нормально и печатается красиво! Так что, похоже, проблема саксонская.
Отредактировано позже:
Я поправлен. Думаю, я должен извиниться перед Saxon за непонимание ограничений xquery и lmxl. См. комментарии Мартина Хоннена ниже. На самом деле я согласен, поскольку процессор xquery не знает, что такое тип вывода, эти вещи лучше оставить в самом сценарии xquery, используя объявления (о которых я не знал). На самом деле это сделает код даже намного чище, чем если бы мне пришлось использовать другую библиотеку в качестве lxml:
myxml = "123"
xquery = '''
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:indent "yes";
declare option output:omit-xml-declaration "yes";
{
for $b in books/book
return $b
}
'''
with PySaxonProcessor(license=False) as pyproc:
docb= pyproc.new_document_builder()
xdoc = docb.parse_xml(xml_text=myxml)
xqp = pyproc.new_xquery_processor()
try:
result=xqp.run_query_to_string(input_xdm_item = xdoc,query_text=xquery,lang='3.1')
print(result)
except Exception as e:
print(e)
Результат будет:
1
2
3
Подробнее здесь: https://stackoverflow.com/questions/787 ... with-saxon
Pretty Print XML с Saxon ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение