Ne kütüphaneler PHP kullanarak bir DTD ayrıştırmak

2 Cevap php

Ben PHP kullanarak DTDlerinden ayrıştırmak gerekiyor ve yardım için simple kütüphane var umuyorum. Her DTD sayıda <!ENTITY... ve ben üzerine hareket etmek gerekir <!-- Comment... elemanları vardır.

Veri dosyaları kendileri gibi not bu DTDlerinden karşı bir şey doğrulamak gerekir unutmayın, sadece onları ayrıştırmak.

Ben baktım birkaç seçenekleri:

James Clarke's SD, son çare bir seçenektir, ama PHP için dış bina / yükleniyor / yapılandırma kod karmaşıklığını önlemek istiyorum hangi. Ben benim durum bile mümkün olduğundan emin değilim.

Armut Armut ve ben de mümkün olduğundan emin değilim armut modülleri bir dizi, yapılandırma / yükleme gerektirir, bir XML_DTD_Parser, ve oldukça önleyeceğini. Herkes başarı ile kullanmıştır? EDIT: Ben beri XML_DTD_Parser yorumlarınıza iptal ettiğini öğrendim, bu yüzden benim ihtiyaçları için geçerli bir seçenek değildir.

PHP XML Classes başka bir site önerdi class_path_parser, vardır, ama ENTITY elemanlarını okumak için başarısız olur. PHP XML ayrıştırma yetenekleri inşa, expat kullanan kullanıyor görünüyor.

Ben ilk bakışta doğrudan DTD çözümleyici almak için nasıl görmüyorum ama PHP'nin DOMDocument will validate against a DTD, bu nedenle, onları okumak gerekir.

2 Cevap

PHP için standart XML ayrıştırıcıların Yok general kuruluşlara erişim * verir ve birkaç yorum erişim sağlar. PHP'nin Expat XML Parser kullanımlarda inşa edilmiş, ancak tam expat API göstermiyor; Özellikle, varlıklar için bir işleyici ayarlanamaz. Bir PHP bug bu eklemek için dava yoktur.

AFAICT DTD çözümleyici açıklamaları ve genel varlıkları işlemek için tek yolu kendi ayrıştırıcı yazmak için; ya elle ya lexers ve php için mevcut ayrıştırıcı jeneratör birini kullanarak (örneğin, PHP_LexerGenerator ve PHP_ParserGenerator diğerleri arasında).

* PHP'nin göçmen sarıcı (XML Ayrıştırıcı) benzer gösterimde bildirimleri, erişim vermek yok, ama genel varlıklar olarak aynı değildir.

Ben olacak bu kullanışlı bilmiyorum ...

Ben aradığınız anlamak, onlara hareket etmek için bir DTD ve "düğümleri" ayıklamak için bir araç arıyoruz. Çok ilginç. Beynim nereye gitti İşte:

  • DOMDocument class doğrudan kullanın. Eğer kaynak olarak DTD tedavi eğer DTD verilere almanın hiçbir belirgin yolu yok gibi görünüyor.
  • Aynı şekilde SimpleXML kullanın. Ditto.
  • XML parser Aynı şekilde, yine, kullanın ama bilgi almak için varlık beyan eylemci bazı fonksiyonları kullanın. Ben bu daha öngörü kanıtlıyor ve muhtemelen neye ihtiyacınız olduğunu düşünüyorum. (Ben yanlış olabilir rağmen.)
  • Desen dayalı değerlerini kapmak için, preg_match_all, veya benzeri kullanın. other thoughts in the world için farklı değil.
  • Ne gerek her şeyi ama nix XSLT kullanın. Olmayan tüm yorumları kaldırmak. Xsl yönetmek oldukça kolay olurdu. Oldukça mümkündür yaparsın sadece output them in a format that's easier to parse (diyelim, daha iyi XML yapısında). Birlikte PHP'nin XSL processor aracılığıyla işleme gerekebilir. Ben varlıklar üzerinde biraz paslı değilim.

Ne olursa olsun, ben bu biraz yardımcı olur umarım.