gpt4 book ai didi

python - 如何修复 lxml 中的 XSD 导入错误?

转载 作者:太空狗 更新时间:2023-10-30 00:14:26 28 4
gpt4 key购买 nike

我使用 lxml 运行此验证:

parser = etree.XMLParser()

try:
root = etree.fromstring(xml_content.strip(), parser)
except Exception as e:
raise XMLFormatException(str(e), XMLFormatException.IN_XML)

try:
schema = etree.XMLSchema(etree.XML(xsd_content.strip()))
except Exception as e:
raise XMLFormatException(str(e), XMLFormatException.IN_XSD)

if not schema.validate():
raise XMLValidationException("Se produjo un error al validar el XML", schema.error_log)

假设 xml_contentxsd_content 被正确实例化。 xsd的部分内容是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="xmldsig-core-schema.xsd" />
<!-- more stuff here -->
</xsd:schema>

当我运行脚本时出现错误:

failed to load external entity "xmldsig-core-schema.xsd"

当我点击 http://www.w3.org/2000/09/xmldsig# 时在浏览器中,我得到一个 xsd 内容。

:我在这里缺少什么?我怎样才能避免这样的错误?

编辑注释:

  1. 此错误发生在可以进行验证之前(即此错误发生在 XMLSchema 构造函数中)。
  2. xsd 文件是从外部来源提供的,我不能对其进行编辑。

最佳答案

确保您在导入 XSD 的同一目录中有 xmldsig-core-schema.xsd 的副本。

如果您希望将导入的 XSD 定位到文件系统中的其他位置,您可以使用 URI 表示法中的绝对路径。例如,在 Windows 上:

<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="file:///c:/path/to/your/xsd/xmldsig-core-schema.xsd" />

或者改变这个:

<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="xmldsig-core-schema.xsd" />

为此:

<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="http://www.w3.org/2000/09/xmldsig" />

访问您已验证位于该端点的远程副本。

关于python - 如何修复 lxml 中的 XSD 导入错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com