![](/img/trans.png)
[英]How to dynamically insert closing tags in xml file if not present using nodejs?
[英]Adding missing XML closing tags in Javascript
我需要使用Node.js解析具有以下結構的外部文件。
<ISSUER>
<COMPANY-DATA>
<CONFORMED-NAME>EXACTECH INC
<CIK>000012345
<ASSIGNED-SIC>9999
<IRS-NUMBER>8979898988
<STATE-OF-INCORPORATION>FL
<FISCAL-YEAR-END>1231
</COMPANY-DATA>
<BUSINESS-ADDRESS>
<STREET1>22W 56TH COURT
<CITY>GAINSVILLE
<STATE>FL
<ZIP>32653
<PHONE>999-999-9999
</BUSINESS-ADDRESS>
<MAIL-ADDRESS>
<STREET1>22W 56TH COURT
<CITY>GAINSVILLE
<STATE>FL
<ZIP>32653
</MAIL-ADDRESS>
</ISSUER>
塊具有結束標記,但個別行則沒有。 如何添加缺少的結束標記,以便可以解析XML?
我無法控制XML文件的生成,因此無法從源頭上修復它。
這類似於此Java實現: 在Java中解析沒有結束標記的XML
您的數據看起來像SGML,這是XML的超集,允許標記推斷/遺漏。 我正在發布針對JavaScript的SGML解析器(針對瀏覽器,node.js和其他CommonJS平台),但尚未發布。 暫時,我建議使用古老的OpenSP軟件,該軟件沒有npm集成軟件包,但可以輕松地安裝在例如。 使用sudo apt-get install opensp
Ubuntu / Debian,在其他Linuxen上和通過MacPorts在Mac OS上類似。
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上了解有關這些聲明的含義的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.