lxml.objectify 和前导零

2024-01-03

当 objectify 元素打印在控制台上时,前导零会丢失,但它会保留在.text:

>>> from lxml import objectify
>>> 
>>> xml = "<a><b>01</b></a>"
>>> a = objectify.fromstring(xml)
>>> print(a.b)
1
>>> print(a.b.text)
01

据我了解,objectify自动使b元素一个IntElement类实例。但是,即使我尝试使用显式设置类型,它也会这样做XSD架构 http://lxml.de/objectify.html#asserting-a-schema:

from io import StringIO
from lxml import etree, objectify

f = StringIO('''
   <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <xsd:element name="a" type="AType"/>
     <xsd:complexType name="AType">
       <xsd:sequence>
         <xsd:element name="b" type="xsd:string" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:schema>
 ''')
schema = etree.XMLSchema(file=f)
parser = objectify.makeparser(schema=schema)

xml = "<a><b>01</b></a>"
a = objectify.fromstring(xml, parser)
print(a.b)
print(type(a.b))
print(a.b.text)

Prints:

1
<class 'lxml.objectify.IntElement'>
01

我怎样才能强迫objectify认识到这一点b元素作为字符串元素?


根据文档和观察到的行为,似乎XSD Schema仅用于验证,但不参与确定属性数据类型的过程。

例如,当一个元素被声明为类型时integer在 XSD 中,但是 XML 中的实际元素的值为x01,元素无效异常被正确引发:

f = StringIO(u'''
   <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <xsd:element name="a" type="AType"/>
     <xsd:complexType name="AType">
       <xsd:sequence>
         <xsd:element name="b" type="xsd:integer" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:schema>
 ''')
schema = etree.XMLSchema(file=f)
parser = objectify.makeparser(schema=schema)

xml = '''<a><b>x01</b></a>'''
a = objectify.fromstring(xml, parser)
# the following exception raised:
# lxml.etree.XMLSyntaxError: Element 'b': 'x01' is not a valid value of....
# ...the atomic type 'xs:integer'.

Despite objectify文档关于数据类型如何匹配 http://lxml.de/objectify.html#how-data-types-are-matched提到关于XML 架构 xsi:类型(链接部分中的第 4 号),那里的示例代码表明这意味着通过增加xsi:type属性直接位于实际的 XML 元素中,不通过单独的 XSD 文件,例如:

xml = '''
<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <b xsi:type="string">01</b>
</a>
'''
a = objectify.fromstring(xml)

print(a.b)  # 01
print(type(a.b)) # <type 'lxml.objectify.StringElement'>
print(a.b.text) # 01
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lxml.objectify 和前导零 的相关文章

随机推荐

  • 2.2.2 eBean的@Transactional在抛出Exception时不回滚事务

    似乎在将 Play Framework 2 2 2 与 eBean ORM 一起使用时 play db ebean Transactional 抛出异常时不回滚事务 你们有人知道这个问题以及如何解决它吗 我看到 eBean 在他们的 ava
  • 如何从 Pandas DataFrame 制作分组条形图[重复]

    这个问题在这里已经有答案了 如何使用 pyplot 绘制此数据框 Team Boys Girls 0 Sharks 5 5 1 Lions 3 7 data Team Sharks Lions Boys 5 5 Girls 5 6 df p
  • python中存储时间长度的类型是什么?

    我正在使用 total time datetime time int total time text replace h replace m split 0 int total time text replace h replace m s
  • 无法在 Terminal.app OSX 上使用 Ctrl+A 和 Ctrl+E(bash 键绑定)

    因此 由于某些奇怪的原因 我无法在 Terminal app 中的 bash 上使用 A 和 E 但是我可以使用 C R Y L 和所有其他键绑定 绑定 p显示 C a 行首 C e 行尾 所以我认为还有其他东西阻碍了这些键绑定 知道我该如
  • 为什么UTF-8使用多个字节来表示某些字符?

    我最近经历了一个article http www sitepoint com do you know your character encodings 关于字符编码 我对那里提到的某一点感到担忧 在第一张图中 作者展示了字符 它们在各种字符
  • 如何将下一个最大数字插入数据库

    我编写了一段 mysqli 代码 它将把值插入数据库 insertsql INSERT INTO Teacher TeacherId TeacherForename TeacherSurname TeacherEmail TeacherAl
  • 在 Objective-C 中打印多页

    我有一个像这样的打印功能 void sendToPrinter int code NSPrintInfo printInfo NSPrintInfo sharedInfo NSPrintOperation printOp NSMutable
  • 在 Windows 应用商店应用程序中获取 CoreDispatcher 的正确方法

    我正在构建一个 Windows 应用商店应用程序 并且有一些代码需要发布到 UI 线程 为此 我想检索 CoreDispatcher 并使用它来发布代码 似乎有几种方法可以做到这一点 First way Windows Applicatio
  • 如何从列的每一行中删除重复的字符?

    如何使用 R 从列的字符串中删除重复字符 例如 这是我的专栏 df lt data frame name c A a a b c d d d B a b b b f C d d d d D a a 还有我期待的专栏 df lt data f
  • 如何向 pagedown 添加自定义图像标签?

    我正在尝试复制原始内容img自定义标签的功能img将添加到 pagedown 转换器的标记 例如 我复制原始行为 image url 1 1 http lolink com gives img src http lolink com 变成一
  • Django_Socketio 和 Apache

    我对网络开发还很陌生 最近我一直在使用 Django 制作一个网站 我对在网站中实现 websocket 非常感兴趣 为了实现这一点 我使用了 django socketio 可在 git hub 上找到 https github com
  • Android缩放动画闪烁

    我的应用程序中有框架布局 在框架中我有 ImageView 和 TextView 我一直需要框架布局反弹 我用 xml 制作了这个动画
  • 通过ObjectOutputStream将LinkedList写入文本文件但输出是垃圾

    当我尝试将链接列表的内容写入文本文件时 出现输出错误 try FileOutputStream out new FileOutputStream ValidMovesMatrix txt ObjectOutputStream oout ne
  • 当用户确认“离开页面”时触发 javascript 函数

    我正在使用下面的代码来触发confirmExit 当用户尝试离开页面时函数 window onbeforeunload confirmExit function confirmExit return Are you sure you wan
  • RxJava。顺序执行

    在我的 Android 应用程序中 我有一个演示者 它处理用户交互 包含某种请求管理器 如果需要 可以通过请求管理器将用户输入发送到请求管理器 请求管理器本身包含服务器 API 并使用此 RxJava 处理服务器请求 我有一个代码 每次用户
  • Oracle 不同模式上的表名相同吗?

    是否可以在不同模式上使用相同的表名称 而在一个数据库中的表上使用不同的数据 我认为我不应该创建多个数据库 包含相同的表名 而应该创建多个模式 就像是 Schema 1 table A table B Schema 2 table B tab
  • 图解:python语言重路由问题测试

    贵公司有N服务器 信息通过连接从一台服务器流向另一台服务器 如果信息从服务器流出i到服务器j then 联系 i j 某些服务器连接 i i 是可能的 这意味着信息不会进一步流动 给定一个由 N 个整数组成的数组连接 您的任务是对连接数组值
  • 如何根据当前服务器找到最合适的缓冲区大小来读取或写入Stream

    我正在编写一个服务器 它将准备好并写入巨大的文件 数据库 我在很多地方使用了 Stream 读写函数 其中我使用 8192 作为缓冲区大小 我还从 TCP 套接字读取大量输入 我不知道将部署该服务的虚拟机的配置是什么 是否有任何内置函数可以
  • Lucene 通配符查询

    我有一个关于 Lucene 的问题 我有一个表单 并从中获取文本 我想在多个字段中执行全文搜索 假设我从输入中获取文本 textToLook 我有一个带有多个过滤器的 Lucene 分析器 其中之一是 lowerCaseFilter 因此当
  • lxml.objectify 和前导零

    当 objectify 元素打印在控制台上时 前导零会丢失 但它会保留在 text gt gt gt from lxml import objectify gt gt gt gt gt gt xml a b 01 b a gt gt gt