首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyXB XML对象到字符串

PyXB XML对象到字符串
EN

Stack Overflow用户
提问于 2018-04-16 23:10:11
回答 1查看 411关注 0票数 0

给定一个PyXB对象,如何将其转换为字符串?

我使用PyXB生成一个XML文档,然后使用xmltodict模块将其转换为字典。问题是xmltodict.parse接受一个类似字节的对象,而PyXB对象当然不是。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-19 01:03:51

我在python python库中找到了一个方法来实现这一点。该方法接受一个PyXB对象,并使用给定的编码对其进行序列化。

代码语言:javascript
复制
  def serialize_gen(obj_pyxb, encoding, pretty=False, strip_prolog=False):
  """Serialize a PyXB object to XML
  - If {pretty} is True, format for human readability.
  - If {strip_prolog} is True, remove any XML prolog (e.g., <?xml version="1.0"
  encoding="utf-8"?>), from the resulting string.
  """
  assert is_pyxb(obj_pyxb)
  assert encoding in (None, 'utf-8')
  try:
    if pretty:
      pretty_xml = obj_pyxb.toDOM().toprettyxml(indent='  ', encoding=encoding)
      # Remove empty lines in the result caused by a bug in toprettyxml()
      if encoding is None:
        pretty_xml = re.sub(r'^\s*$\n', r'', pretty_xml, flags=re.MULTILINE)
      else:
        pretty_xml = re.sub(b'^\s*$\n', b'', pretty_xml, flags=re.MULTILINE)
    else:
      pretty_xml = obj_pyxb.toxml(encoding)
    if strip_prolog:
      if encoding is None:
        pretty_xml = re.sub(r'^<\?(.*)\?>', r'', pretty_xml)
      else:
        pretty_xml = re.sub(b'^<\?(.*)\?>', b'', pretty_xml)
    return pretty_xml.strip()
  except pyxb.ValidationError as e:
    raise ValueError(
      'Unable to serialize PyXB to XML. error="{}"'.format(e.details())
    )
  except pyxb.PyXBException as e:
    raise ValueError(
      'Unable to serialize PyXB to XML. error="{}"'.format(str(e))
    )

例如,可以将PyXB对象解析为UTF-8

serialize_gen(pyxb_object, utf-8)

要将对象转换为字符串,它将被调用为

serialize_gen(pyxb_object, None)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49867521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档