您的数据看起来像 SGML,它是允许标签推断/省略的 XML 超集。我正在为 JavaScript 发布一个 SGML 解析器(用于浏览器、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
和其他带有省略的结束元素标签的元素添加省略的结束元素标记。为此,您可以在 SGML 内容之前添加文档类型声明(DTD)。在您的情况下,您向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上阅读更多关于这些声明的含义。