无法使用架构验证 XML,但可以通过从中读取写入的文件来工作

2024年 2月 22日 81.7k 0

无法使用架构验证 xml,但可以通过从中读取写入的文件来工作

问题内容

我当前正在使用 lxml 并希望验证 xml 内容。

我从 tei = etree.element("tei", nsmap={none: 'http://www.tei-c.org/ns/1.0'} 完全用 python 编写,包含许多子元素。 p>

现在,我想使用以下代码使用特定的 .xsd 文件检查结构是否正确:

xmlschema_doc = etree.parse(xsd_file_path)
xmlschema = etree.xmlschema(xmlschema_doc)
# run check
status = xmlschema.validate(xml_tree)

登录后复制

它返回 false,并显示错误 element 'tei':没有可用于验证 root. 的匹配全局声明

我观察到一件非常奇怪的事情,如果我使用 编写 xml

et = etree.elementtree(xmldata)
et.write('test.xml', pretty_print=true, xml_declaration=true, encoding='utf-8')

登录后复制

如果我用 b= etree.parse('test.xml') 重新打开它,我最终没有错误,并且由于 xmlschema.validate(b) 的结果,xml 结构是有效的

知道我需要在 xml 结构中添加什么吗?

编辑:
无效 xml 中的第一项

有效 xml 文件中的第一项

编辑:

article
article
A subtitle

John
Doe

email
orcid

Jane
Middle
Doe

email
orcid

small comment
small description

article
article
A subtitle

John
Doe

email
orcid

Jane
Middle
Doe

email
orcid

978-1725183483
117751
xxx

springer
a special collection
20
1
10-25
2024-01-01

reg
ger
erg
greger
greger
gaergezg
gegzefdv
vvxc
gderg
gev
xcvcxv
vxcv
https://publisher.com/ID
https://link1.com/ID
https://link2.com/ID
https://link3.com/ID

keyword1
keyword2
mot-clé1
mot-clé2

laboratory for MC, university of Yeah
LMC

Blue street 155, 552501 Olso, Norway
Lesotho

laboratory for MCL, university of Yeah
LMCL

Blue street 155, 552501 Olso, Norway
Norway

登录后复制

正确答案

看看https://www.php.cn/link/e1ff36b97044a1c7c73c73e4d27aeba4,你基本上应该使用

tei_namespace = "http://www.tei-c.org/ns/1.0"
tei = "{%s}" % tei_namespace

nsmap = {none : tei_namespace} # the default namespace (no prefix)

root = etree.element(tei + "tei", nsmap=nsmap) # lxml only!
text = etree.subelement(root, tei + "text")

登录后复制

对所有元素依此类推,以确保它们是在 tei 命名空间中创建的。

在内存中创建的 elementtree 对架构有效(在我将其与导入的 w3c xml.xsd 一起下载后)是例如

from lxml import etree

TEI_NAMESPACE = "http://www.tei-c.org/ns/1.0"
TEI = "{%s}" % TEI_NAMESPACE

NSMAP = {None : TEI_NAMESPACE} # the default namespace (no prefix)

root = etree.Element(TEI + "TEI", nsmap=NSMAP) # lxml only!
text = etree.SubElement(root, TEI + "text")
body = etree.SubElement(text, TEI + "body")
listBibl = etree.SubElement(body, TEI + "listBibl")
biblFull = etree.SubElement(listBibl, TEI + "biblFull")
sourceDesc = etree.SubElement(biblFull, TEI + "sourceDesc")
profileDesc = etree.SubElement(biblFull, TEI + "profileDesc")

xmlschema_doc = etree.parse("aofr.xsd")
xmlschema = etree.XMLSchema(xmlschema_doc)
# run check
status = xmlschema.validate(root)

print(status)

print(xmlschema.error_log)

登录后复制

以上就是无法使用架构验证 XML,但可以通过从中读取写入的文件来工作的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论