我编写这段代码是为了通过xsd验证我的xml文件
def parseAndObjectifyXml(xmlPath, xsdPath):
from lxml import etree
xsdFile = open(xsdPath)
schema = etree.XMLSchema(file=xsdFile)
xmlinput = open(xmlPath)
xmlContent = xmlinput.read()
myxml = etree.parse(xmlinput) # In this line xml input is empty
schema.assertValid(myxml)
但是当我想验证它时,我的xmlinput是空的,但是xmlContent不是空的。 有什么问题吗?在
python中的文件有一个“current position”;它从文件的开头开始(位置0),然后,当您读取文件时,当前位置指针会一直移动,直到它到达末尾。在
在lxml解析器完全读取内容之前,您需要将指针放回开头。使用^{} method 来实现:
只有当您还需要
^{pr2}$xmlContent
时,才需要这样做;或者,如果包装在StringIO
对象中,则可以将其传递到.parse()
方法中,以提供必要的文件对象方法:如果您不是使用
xmlContent
来做其他事情,那么您也不需要额外的.read()
调用,并且随后用lxml解析它也不会有问题;只需完全忽略该调用,也不需要将当前位置指针移回起始位置:要了解更多关于
.seek()
(以及它的对应物,.tell()
),read up on file objects in the Python tutorial。在您应该使用阅读过的XML内容:
而不是:
^{pr2}$相关问题 更多 >
编程相关推荐