如果您可以找到您使用的文档的 SGML DTD,解决方案可能是使用osxSGML 到 XML 转换器OpenSP SGML 工具包 http://openjade.sourceforge.net/doc/index.htm将文档转换为 XML。
这是一个简单的例子。假设我们有以下 SGML 文档(company.sgml;带有根元素):
<!DOCTYPE ROOT SYSTEM "company.dtd">
<ROOT>
<COMPANY>Awesome Corp
<FORM> 24-7
<ADDRESS>
<STREET>101 PARSNIP LN
<ZIP>31337
</ADDRESS>
DTD (company.dtd) 如下所示:
<!ELEMENT ROOT - o (COMPANY, FORM, ADDRESS) >
<!ELEMENT COMPANY - o (#PCDATA) >
<!ELEMENT FORM - o (#PCDATA) >
<!ELEMENT ADDRESS - - (STREET, ZIP) >
<!ELEMENT STREET - o (#PCDATA) >
<!ELEMENT ZIP - o (#PCDATA) >
The - o
bit表示结束标记可以省略。
SGML 文档可以用以下方式解析osx,并且输出可以格式化为xmllint, 如下:
osx company.sgml | xmllint --format -
上述命令的输出:
<?xml version="1.0"?>
<ROOT>
<COMPANY>Awesome Corp</COMPANY>
<FORM> 24-7</FORM>
<ADDRESS>
<STREET>101 PARSNIP LN</STREET>
<ZIP>31337</ZIP>
</ADDRESS>
</ROOT>
现在我们有了格式良好的 XML,可以使用 lxml 或其他 XML 工具进行处理。
我不知道您链接到的文档是否有完整的 DTD。以下 PDF 文件包含有关 EDGAR 的相关信息,包括可能有用的 DTD:http://www.sec.gov/info/edgar/pdsdissemspec910.pdf http://www.sec.gov/info/edgar/pdsdissemspec910.pdf(我通过找到它这个答案 https://stackoverflow.com/a/12431072/407651)。但链接的 SGML 文档包含元素 (SEC-HEADER
,例如)PDF 文件中未提及的内容。