Pretty Print XML с SaxonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pretty Print XML с Saxon

Сообщение Anonymous »

Я пытаюсь красиво распечатать результат строки 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Pretty-Print JSON в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • C# Json Pretty Print/Format лучше, чем библиотека Chilkat.Json?
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Pretty-Print JSON в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Pretty-Print JSON в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • PHP "Pretty Print" json_encode [дублировать]
    Anonymous » » в форуме Php
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»