PHP DOM XPath ayrıştırma tablo ile yardıma ihtiyacınız

2 Cevap php

Ben sadece son zamanlarda PHP DOM modülü hakkında okumak ve şimdi ben bir HTML belgesi ayrıştırma için kullanmaya çalışıyorum. Sayfayı Preg kullanılarak ama bunu kullanmak için nasıl bulmaktan zor bir zaman yaşıyorum çok daha iyi bir çözüm olduğunu söyledi.

Sayfa tarih ve tarih için olayların X sayısı ile bir tablo içeriyor.

Önce valign = "alt" ile tr gelen bir metin (tarih) almak gerekir ve daha sonra o tr altındadır valign = "top" ile tüm tr tüm sütun değerlerini almak gerekir. Ben tarih yukarıya tr aşağıda her tr den valign = "alt" (sonraki tarih) ile sonraki tr kadar tüm sütun değerleri gerekir. Sütun veri ile tr sayısı bilinmiyor, onları bir sürü sıfır ya da olabilir.

Bu sayfada HTML gibi görünüyor budur:

<table>
    <tr valign="bottom">
        <td colspan="4">2009-02-26</td>
    </tr>
    <tr valign="top">
        <td>21:00</td>
        <td>Column data</td>
        <td>Column data</td>
        <td>Column data</td>
    </tr>
    <tr valign="top">
        <td>23:00</td>
        <td>Column data</td>
        <td>Column data</td>
        <td>Column data</td>
    </tr>
    <tr valign="bottom">
        <td colspan="4">2009-02-27</td>
    </tr>
    <tr valign="top">
        <td>06:00</td>
        <td>Column data</td>
        <td>Column data</td>
        <td>Column data</td>
    </tr>
    <tr valign="top">
        <td>10:00</td>
        <td>Column data</td>
        <td>Column data</td>
        <td>Column data</td>
    </tr>
    <tr valign="top">
        <td>13:00</td>
        <td>Column data</td>
        <td>Column data</td>
        <td>Column data</td>
    </tr>
</table>

Şimdiye kadar ilk iki tarihlerini (ben ilk iki ilgileniyorum sadece) almak mümkün oldum ama ben buradan gitmek için nasıl bilmiyorum.

Ben tarih TRS almak için kullanabilirsiniz xpath sorgu

$result = $xpath->query('//tr[@valign="bottom"][position()<3]);

Şimdi ben bugüne kadar o gün, yani tüm olayları bağlamak için bir yol gerekir. Tüm tds seçin ve tüm sütun sonraki tarih tr kadar değerleri.

2 Cevap

Kullan following-sibling().

Bu XPath ifadesi

/table/tr/td[@colspan=4]

veya

/table/tr[valign='bottom']/td

Tarih hücreleri ile ayarlanmış bir düğüm sonuçlanır.

Işaretleri arasında hücreleri almak nasıl?

/table/tr/td[not(@colspan=4)][preceding::td[@colspan=4][1]='2009-02-26']