PHP5 farklı XML ayrıştırma kütüphaneler arasındaki fark nedir?

8 Cevap php

The original question is below, but I changed the title because I think it will be easier to find others with the same doubt. In the end, a XHTML document is a XML document.

Bu bir acemi bir soru, ama PHP5'ta XHTML belgeleri ayrıştırma için en iyi kütüphane olduğunu düşünüyorsunuz bilmek istiyorum?

Ben HTML dosyalarından XHTML yarattı (ki Word'ü kullanarak oluşturduğunuz yere: S) Tidy ile, ve ben (

etiketleri bazı özelliklerini değiştirmek ve eleman gibi) onlardan bazı unsurları değiştirmek gerekir biliyorum.

Ben kolay biri bir var, hangi PHP ayrıştırma için birçok seçenek (vb Basit XML DOM) olarak görünüyor ve hepsi yapabilirsiniz eğer ben ne gerek bilmiyorum, çok XML kullanmadıysanız kullanmak için.

İngilizcem için özür dilerim, ben Arjantin oluştururlar. Teşekkürler!

I bit more information: Ben Word 97'de yapılan HTML sayfaları, bir sürü var. Ben temizlik ve XHTML onları dönüm için Tidy kullanılan Katı, şimdi hepsi XML uyumludur. Ben bazı unsurları bulmak ve (ben bu önemli değil yapmak hangi mantık) bunların yerine bir XML ayrıştırıcı kullanmak istiyorum. Örneğin, ben tüm sayfaları birleşik bir görünüm için, aynı CSS stil ve sınıf özelliklerini kullanmak istiyorum. Bunlar yasal belgeleri içeren tüm statik sayfalar, orada garip bir şey vardır. Ben uzantıları hangisi kullanmalıyım? SimpleXML yeterli mi? Ben daha zor olmasına rağmen DOM öğrenmek gerekir?

8 Cevap

Sadece burada karışıklığı temizlemek için. PHP4 bu yönde çok iyi seçenekleri yoktu çünkü PHP, XML kütüphanelerin bir numarası vardır. PHP5 itibaren, SimpleXml, DOM ve sax-based expat parser arasında seçim var. İkincisi de PHP4'te var. php4 da php5 olduğu gibi not ile aynı olan bir DOM uzatma vardı.

DOM ve SimpleXML aynı problem alanı alternatifleri vardır; Bunlar belgeyi belleğe læoad ve bir ağaç yapısı olarak erişmenizi sağlar. DOM oldukça hantal api, ama aynı zamanda çok tutarlı ve (örneğin Javascript Adet) dilleri arasında bilginizi yeniden kullanabilirsiniz, yani, birçok dilde uygulanacağı. SimpleXML başlangıçta kolay olabilir.

SAX çözümleyici farklı bir canavar. Bu etiketleri bir akışı olarak bir xml belgesini davranır. Eğer çok büyük belgeleri ile ilgileniyor eğer bellekte tüm tutmak gerekmez çünkü bu, yararlıdır.

Lütfen kullanım için, ben muhtemelen DOM API kullanmak istiyorum.

Yüklediğinizde varsayılan PHP dahil edildiği, SimpleXML kullanabilirsiniz. Bu uzantıları XML yapıları kolay nesne yönelimli erişimi sunmaktadır.

Orada da DOM XML. Bu uzantı için bir "olumsuz" kullanmak için biraz daha zor olduğunu ve varsayılan olarak dahil olmadığını olmasıdır.

  • DOM W3C tarafından standardize edilmiştir XML gibi hiyerarşik veri için standart bir dil bağımsız API. Bu çok işlevselliği ile zengin bir API. Her bir düğüm bir amacı, bu şekilde, temel amacıdır.

    Okumak, ya da yazmak istemiyorum sadece DOM iyidir, ama vb, diğerleri arasındaki düğümleri ekleme yapısını değiştirme gibi düğümler varolan bir belge manipülasyonu bir sürü yapmak istiyorum

  • SimpleXML, aynı zamanda nesne tabanlı ama DOM daha az 'veciz' bir yeri olması amaçlanmıştır bir PHP özgü API: böyle bir düğümün değerini bulma veya alt öğeleri bulma gibi basit görevler almak çok daha az kod. Onun API DOM daha zengin değil, ama yine de böyle bir XPath aramalarını gibi özellikleri, ve çoklu-ad belgeleri ile çalışmak için temel bir yeteneğini de içerir. Onları işlemek için fonksiyonlarını içermiyorsa Ve olsa bile, önemlisi, hala, böyle XML CDATA bölümleri ve açıklama gibi belgenin tüm özelliklerini korur.

    SimpleXML salt okunur için çok iyi: yapmak istediğiniz tüm XML belgesini okumak ve başka bir forma dönüştürmek ise, o zaman size bir sürü kod tasarruf edersiniz. Eğer bir belge oluşturmak, ya da çocuk öğelerini veya niteliklerini ekleme veya değiştirme gibi temel manipülasyonlar yapmak istediğiniz zaman da oldukça iyi, ama mevcut belgelerin manipülasyon bir sürü yapmak için karmaşık (ama imkansız değil) olabilir. Bu iki diğerleri arasında bir alt öğe eklemek için, örneğin, kolay değil; addChild ancak diğer elemanların sonra ekler. SimpleXML da XSLT dönüştürmeleri yapamaz. Bu 'getElementsByTagName' veya GetElementById 'gibi şeyler yok, ama sen XPath'i biliyorum eğer hala SimpleXML ile bu tür şeyler yapabilir.

    SimpleXMLElement nesnesi biraz 'büyülü' olduğunu. Eğer / PrintR / var_export var_dump eğer ortaya özellikleri komple iç gösterimi karşılık gelmez. Onlar ile ulaşılabilir özellikleri sanki onun çocuk elemanlarının bazı ortaya çıkarır -> operatörü, ama yine de içten tam belgeyi korur ve erişim gibi isimlerin ayrılmış bir sözcüktür, bir alt öğe şeyler yapabilirsiniz [] Operatör bir ilişkisel dizi oldu sanki.

PHP fonksiyonları uygulayan, çünkü tam bir ya da diğer işlemek zorunda değilsiniz:

  • simplexml_import_dom (DOMNode)
  • dom_import_simplexml (SimpleXMLElement)

Eğer SimpleXML kullanarak ve tam tersi bir DOM düğümü veya beklediği kodu ile çalışmak gerekiyorsa bu yararlı olur.

PHP ayrıca üçüncü bir XML kütüphane sunmaktadır:

  • XML Parser (SAX bir uygulama, bir dilden bağımsız arayüz, ancak kılavuzda bu adla anılır değil) oldukça farklı bir amaca hizmet eden bir çok alt düzey kütüphanesidir. Bu sizin için nesneleri oluşturmak değil. Sizin için, sonraki belirteç ilerleyen ve bu etiketi adı ne olarak ve bir açılış veya kapanış etiketi olsun belirteç türünü bulma işini yapar, çünkü temelde sadece, daha kolay kendi XML ayrıştırıcı yazmak için yapar . Sonra bir belirteç karşılaşılan her zaman çalıştırmak gerektiğini geri çağrıları yazmak zorunda. Eğer XML çözümleyici ile yapabileceğiniz tüm düşük seviyeli ayrıştırıcı yazmak olduğundan vb, bir ağaç nesneler / diziler belgeyi temsil eden belgeyi manipüle gibi tüm görevler, ayrı ayrı uygulanması gerekir.

    Eğer belirli bir bellek ya da hız gereksinimleri varsa XML Ayrıştırıcı fonksiyonlar hala oldukça faydalıdır. Bununla beraber, aynı anda bellekte tüm içeriğini tutmadan çok uzun bir XML belgesi ayrıştırma bir ayrıştırıcı yazmak mümkündür. Tüm verileri ilgilenen değil, ve gerekiyorsa ya da bir ağaca koymak veya PHP nesneleri ayarlamak için istemiyorsanız Ayrıca, o zaman daha hızlı olabilir. Örneğin, bir XHTML belge taramak ve tüm bağlantıları bulmak istiyorum, ve eğer yapısı hakkında umurumda değil.

Bu elemanları aracılığıyla lop için kullanmak oldukça kolay gibi SimpleXMLElement tercih ederim.

Edit: Hiçbir sürüm bilgisi avaliable diyor ama daha erken muhtemelen en az 5.2.5 ama, PHP5 DAİREMİZ bulunuyor.

Gerçekten olsa, XML extensions bol miktarda kişisel bir seçimdir.

Geçersiz biçimlendirme varsa aklında birçok XML ayrıştırıcıları inat taşımak - XHTML, XML olabilir ama her zaman değil gerekir!

Ben PHP XML ayrıştırma ile çalıştı bu yana uzun bir süre (2 yıl veya daha fazla) olmuştur, ama her zaman XML_Parser Pear package iyi, kullanışlı sonuçlar gördü. Ben PHP5 az pozlama vardı, bu yüzden daha iyi, dahili alternatifler bu gün varsa ben gerçekten bilmiyorum, o söyledikten sonra.

Neden ilk etapta XHTML ayrıştırmak istersiniz? Bu ne gerektirir uygulaması sadece merak.

Geçen yıl PHP5'ta ayrıştırma XML biraz yaptım ve SimpleXML bir arada kullanmaya karar verdi.

Eğer yeni bir XML ağacını oluşturmak veya mevcut bir, onun biraz daha esnek eklemek istiyorsanız DOM biraz daha yararlıdır.

It really depends on what you're trying to accomplish. For pulling rather large amounts of data, I.E many records of say, product information from a store website, I'd probably use Expat, since its supposedly a bit faster... Personally, I've has XML's large enough to create a noticeable performance boost. At those quantities you might as well be using SQL.

I recommend using SimpleXML. It's pretty intuitive, easy to use/write. Also, works great with XPath.

Gerçekten çok DOM kullanmak lazım, ama sizin tarif ettiğiniz gibi siz büyük bir şey için XML Parser kullanarak eğer bunu kullanmak isteyebilirsiniz, SimpleXML daha onun biraz daha işlevsel beri. Asla

W3C Okullarda her üç okuyabilirsiniz:

http://www.w3schools.com/php/php_xml_parser_expat.asp

http://www.w3schools.com/php/php_xml_simplexml.asp

http://www.w3schools.com/php/php_xml_dom.asp