PHP DOM N-inci Tablo Önce Tag alın

2 Cevap php

Kullanıcının HTML, 15 tablo etiketleri içeren her masada önce içinde bazı metin ile bir div etiketi var diyelim. Ben HTML biçimlendirme 10 tablo etiketinden önce doğrudan div etiketi metni almak gerekir. Bunu nasıl yaparım?

Aklıma tek yolu bölüme HTML bölünmüş ve daha sonra düzenli ifade ile patladı dizinin 9. değerinden son div etiketi almak için ('

Ben PHP DOM documentation ile okuyorum ama ben orada bu görevi bana yardımcı olacak herhangi bir yöntem göremiyorum.

2 Cevap

Sen load your HTML into a DOMDocument ve bu XPath ifadesi ile bunu sorgulamak:

//table[10]/preceding-sibling::div[1]

Bu, aşağıdaki düzen için çalışmak:

<div>Some text.</div>
<table><!-- #1 --></table>
  <!-- ...nine more... -->
<div>Some other text.</div> <!-- this would be selected -->
<table><!-- #10 --></table>
  <!-- ...four more... -->

XPath kolaylığı ile gerçekten karmaşık düğüm aramaları yapma yeteneğine sahiptir. Yukarıda ifade henüz sizin için işe yaramazsa, muhtemelen çok az sizin istediğiniz ne yapmak gereklidir.

HTML bir dize olarak temsil verilerini yapılandırılmış, bu bir dize olmaktan önemli ölçüde farklı bir şeydir. String işleme explode() gibi işlevler, hatta regex böyle şeyler yapmanın kışkırtmaya vermeyin.

XPath öğrenme gibi hissediyorum yoksa, size tarayıcıda JavaScript ile kullanmak istiyorsunuz aynı eski okul DOM yürüme teknikleri kullanabilirsiniz.

document.getElementsByTagName('table')[9]

Bir TextNode değildir ve bir tane bulana kadar sonra yolunuzu kadar .previousSibling değerleri taramasını bir div

PHP'nin DOMDocument mükemmel olmayan HTML ile oldukça iyi çalışıyor ve DOM aldıktan sonra sonra ben bile orijinal HTML / XHTML yapısı 'değildi bile bir SimpleXMLElement nesnesine içine geçmek ve onunla XML tarzı çalışabilir düşünüyorum bulduk mükemmel t.