python - XML 使用外部 DTD 进行验证 - XML 解析器是 Python (lxml),此解析器无法从 HTTPS 端加载外部 DTD
问题描述
我还有另一个我很绝望的问题。我认为这个问题有很多解决方案,但我想知道我的方法是否可以以某种方式实施。
我有一个 XML 文件使用一个外部 DTD,并使用 XML DOCTYP 定义。
xml 文件使用 Python (lxml) 进行解析。因此,可以使用 XML DOCTYP 中定义的 DTD 自动验证不同的文件。我使用可以通过互联网地址访问的外部 DTD。但是这个互联网站点将每个请求重定向到 HTTPS 端口。由于这个原因,Python 无法访问外部 DTD。
多亏了我的一个朋友,我才能够使用一个仍然在 HTTP 上运行的旧的、未使用的网站。解析器可以找到并使用此存储网站上的 DTD。
现在我的问题。是否可以将只能通过 HTTPS 服务器访问的外部 DTD 与 Python-lxml 一起使用?不幸的是,我无法在使用 HTTP 端口的服务器上创建一个区域。
我已经尝试通过 HTTP 请求获取外部 DTD,但它被重定向到 HTTPS 端口。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE book PUBLIC "-//AA//Test//EN" "***">
<!-- <!DOCTYPE book PUBLIC "-//AA//Test//EN" "***"> -->
<book>
<book-meta>
<book-id pub-id-type="other">handbook</book-id>
<book-title-group Id="1">
<book-title name="Hallo">The NCBI Handbook</book-title>
</book-title-group>
</book-meta>
</book>
为了完整起见,这里是一个示例 DTD。
<!ELEMENT book ANY>
<!ATTLIST book
Release CDATA "v0.0.1"
>
<!ELEMENT book-meta ANY> <!-- # related objects: 0 -->
<!ATTLIST book-meta
Value CDATA "Das ist eine Information"
>
<!ELEMENT book-id ANY> <!-- # related objects: 0 -->
<!ATTLIST book-id
pub-id-type CDATA #REQUIRED
>
<!ELEMENT book-title-group ANY> <!-- # related objects: 0 -->
<!ATTLIST book-title-group
Id CDATA #IMPLIED
>
<!ELEMENT book-title ANY> <!-- # related objects: 0 -->
<!ATTLIST book-title
name CDATA #REQUIRED
>
为了解析 XML 文件,我使用了带有库 lxml 的 python 脚本。以下是测试程序。
import xml.etree.ElementTree as ET
import lxml
from lxml import etree
myParser = lxml.etree.XMLParser(attribute_defaults = True, dtd_validation = True, load_dtd =True, no_network = False)
xmlFile = lxml.etree.parse("XML_DTDValidation.xml", parser=myParser)
xmlFile.xinclude()
xmlFile.write("XML_DTDValidation_out.xml",method="xml",xml_declaration=True, encoding='utf-8',pretty_print=True)
我希望我能很好地总结我的问题,有人可以帮助我。
解决方案
推荐阅读
- sparql - 在 sparql 中使用 strafter 函数时,由于无效的行错误,它不会运行
- unity3d - 删除前一个对象后复制新对象
- java - 如何使用 MimeMessageHelper 发送带附件的电子邮件?
- sql-server - 如何在 SSIS 中创建 Row_Number?
- javascript - 使用 JS 在 ClickOn 后将图像放入 HTML div
- ios - 如何通过 XMPPFramework 设置 XMPPMessage 的延迟交付日期属性?
- javascript - 如何在网站上显示 facebook messanger 插件
- vb.net - 我可以通过 VB.net 中的标记引用计时器吗?
- laravel - 我想在这种情况下使用分离单行
- optimization - 来自 Scipy 的数学域误差最小化 SLSQP 约束优化