簡體   English   中英

哪些庫將使用PHP解析DTD

[英]What libraries will parse a DTD using PHP

我需要使用PHP解析DTD,並希望有一個簡單的庫可以提供幫助。 每個DTD都有許多<!ENTITY...<!-- Comment...元素,我需要對其進行操作。

請注意,我並不需要驗證對這些DTD什么,只是它們解析為數據文件本身。

我看過幾個選項:

James Clarke的SD ,這是最后的選擇,但我想避免構建/安裝/配置PHP外部代碼的復雜性。 在我的情況下,我不確定它是否可能。

PEAR有一個XML_DTD_Parser ,它需要安裝/配置PEAR和一些梨模塊,我也不確定是否可行,寧可避免。 有沒有人成功使用它? 編輯:我已經知道XML_DTD_Parser丟棄注釋,因此不是我需要的有效選項。

PHP XML類具有class_path_parser,這是另一個站點建議的,但它無法讀取ENTITY元素。 它似乎使用PHP的內置XML解析功能,它使用EXPAT。

PHP的DOMDocument將針對DTD進行驗證 ,因此必須能夠讀取它們,盡管我沒有看到如何直接進入DTD解析器。

PHP的標准XML解析器都不允許訪問常規實體*,很少有人可以訪問注釋。 PHP的內置XML Parser使用Expat ,但不公開完整的expat API; 特別是,無法設置實體的處理程序。 提交了一個PHP錯誤來添加它。

AFAICT,在DTD解析器中處理注釋和一般實體的唯一方法是編寫自己的解析器; 手動,或使用可用於php的詞法分析器和解析器生成器之一(例如PHP_LexerGeneratorPHP_ParserGenerator等)。

* PHP的expat包裝器(XML Parser)確實提供了對符號聲明的訪問,這些聲明聲明與通用實體類似但不相同。

我不知道這會有用......

如果我理解你在尋找什么,那么你正在尋找一種方法從DTD中提取和“節點”以便對它們采取行動。 很有意思。 這是我的大腦去的地方:

  • 直接使用DOMDocument類 如果將DTD視為源,則看起來沒有明確的獲取DTD數據的方法。
  • 以相同的方式使用SimpleXML 同上。
  • 再次以相同的方式使用XML解析器 ,但使用一些實體聲明處理函數來獲取信息。 我認為這證明了更多的遠見,可能不是你需要的。 (雖然我錯了。)
  • 使用preg_match_all等可以根據模式獲取值。 與世界上的其他想法不相同。
  • 除了你需要的東西之外,使用XSLT來解決所有問題。 刪除所有非注釋的.xsl非常容易管理。 很有可能你可以用一種更容易解析的格式輸出它們 (比如,在一個更好的XML結構中)。 實體可能需要通過PHP的XSL處理器進行處理 我對實體有點生疏。

無論如何,我希望其中一些有所幫助。

暫無
暫無

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

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