簡體   English   中英

在Javascript中添加缺少的XML關閉標簽

[英]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-NAMECIK和其他帶有省略的結束元素標簽的元素添加省略的結束元素標簽。 為此,您可以在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-NAMECIK和其他類似字段的元素的聲明使用- O (連字符減號和字母O)作為標簽省略指示符 ,告訴SGML這些元素的末尾元素標簽可以省略,並將由osx程序自動插入。

您可以在我的項目頁面http://sgmljs.net/docs/sgmlrefman.html上了解有關這些聲明的含義的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM