【问题标题】:PyXB: generating class names in UnicodePyXB:以 Unicode 生成类名
【发布时间】:2016-11-04 17:08:44
【问题描述】:

当元素名称不是 ASCII 时,我无法使用 PyXB 生成绑定类,有人能指出正确的方向吗?

最小的可重现示例:

<?xml version="1.0" encoding="utf8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Address">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Country" type="xs:string" />
        <xs:element name="Street" type="xs:string" />
        <xs:element name="Town" type="xs:string" />       
        <xs:element name="Дом" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

(查找我使用西里尔字母的&lt;xs:element name="Дом" type="xs:string" /&gt;。 文件的编码是utf8。 但是,当我尝试时:

pyxbgen -u example.xsd -m example

我得到了错误:

Traceback (most recent call last):
  File "/home/sergey/anaconda3/lib/python3.5/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 9, column 26

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sergey/anaconda3/bin/pyxbgen", line 52, in <module>
    generator.resolveExternalSchema()
.......

指向元素的西里尔字母名称。我错过了什么?

【问题讨论】:

    标签: python-3.x unicode encoding utf-8 pyxb


    【解决方案1】:

    UTF8 在 XML 和 Python 中拼写为 "utf-8"

    lilith[33]$ head -1 /tmp/cyr.xsd 
    <?xml version="1.0" encoding="utf-8"?>
    lilith[34]$ pyxbgen -u /tmp/cyr.xsd -m cyr
    WARNING:pyxb.binding.generate:Element use None.Дом renamed to emptyString
    Python for AbsentNamespace0 requires 1 modules
    

    不过,PyXB 生成一个名为 emptystring 而不是名为 Дом 的元素是个问题。 PyXB 早在 Python 3 和 unicode 支持之前就已经设计好了,它在将文本转换为有效的 Python 2 标识符方面付出了巨大的努力。

    由于您使用的是 Python 3,因此应该可以绕过该转换,但这并不是很简单。跟踪issue 67,或者如果有西里尔字母音译,您更喜欢使用日语演示的here 技术。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多