Ответ 1
Если вы можете найти SGML DTD для документов, с которыми работаете, решение может заключаться в использовании конвертера SGML для XML osx из OpenSP SGML toolkit, чтобы превратить документы в 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) >
Бит - o
означает, что конечный тег можно опустить.
Документ 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 (я нашел его через этот ответ). Но связанный документ SGML содержит элементы (SEC-HEADER
, например), которые не упоминаются в файле PDF.