Ваши данные выглядят как SGML, расширенный набор XML, позволяющий выводить / пропускать теги.Я нахожусь в процессе выпуска парсера SGML для JavaScript (для браузера, node.js и других платформ CommonJS), но он еще не выпущен.В настоящее время я предлагаю использовать почтенное программное обеспечение OpenSP, которое не имеет пакета интеграции npm, но которое вы можете легко установить, например.Ubuntu / Debian, использующий sudo apt-get install opensp
и аналогичный на других Linuxen и на Mac OS через MacPorts.
Пакет OpenSP содержит утилиту командной строки osx
для преобразования SGML в XML.Вы можете использовать базовый пакет узла child_process
для вызова программы osx
, передачи по ней ваших данных SGML, а также получения полученного в результате XML-результата и передачи полученного XML в анализатор XML по вашему выбору в приложении узла..
SGML и программе osx
необходимо указать добавить пропущенные теги конечных элементов для CONFORMED-NAME
, CIK
и другие элементы с пропущенными тегами конечных элементов.Это можно сделать, добавив объявление типа документа (DTD) перед содержимым SGML.В вашем случае, то, что вы предоставляете программе osx
, должно выглядеть следующим образом:
<!DOCTYPE ISSUER [
<!ELEMENT ISSUER - -
(COMPANY-DATA,BUSINESS-ADDRESS,MAIL-ADDRESS)>
<!ELEMENT COMPANY-DATA - -
(CONFORMED-NAME,CIK,ASSIGNED-SIC,IRS-NUMBER,
STATE-OF-INCORPORATION,FISCAL-YEAR-END)>
<!ELEMENT (BUSINESS-ADDRESS,MAIL-ADDRESS) - -
(STREET1,CITY,STATE,ZIP)>
<!ELEMENT
(CONFORMED-NAME,CIK,ASSIGNED-SIC,IRS-NUMBER,
STATE-OF-INCORPORATION,FISCAL-YEAR-END,
STREET1,CITY,STATE,ZIP) - O (#PCDATA)>
]>
<ISSUER> ... rest of your input data followin here
В сущности, объявление для CONFORMED-NAME
, CIK
и других полевых элементов использует - O
(дефис-минус и буква O) как индикаторы пропуска тегов , указывающие SGML, что теги конечных элементов для этих элементов могут быть опущены и будут автоматически вставлены программой osx
.
Подробнее о значении этих объявлений вы можете прочитать на странице моего проекта по адресу http://sgmljs.net/docs/sgmlrefman.html.