PHP XPath aşağıdaki kardeşler

1 Cevap php

Ben bir tablo içeriğini almak için XPath kullanmaya çalışıyorum.

Tablo bu gibi görünüyor

<div>
<table>
<tr class="tableheader">
    <td> Stuff </td>
</tr>
<tr class="indent1">
     <td> Contents </td>
</tr>
<tr class="indent1">
     <td> Contents </td>
</tr>
<tr class="tableheader">
    <td> Stuff </td>
</tr>
<tr class="indent1">
     <td> Contents </td>
</tr>
<tr class="indent1">
     <td> Contents </td>
</tr>
</table>
</div>

Ben tüm tr değerini çekmeye çalışıyorum [@ class = 'indent1'] Tablo başlıkları arasında

Bu ana kadar ne var:

$elements = $xPath->query("div/table/tbody/tr[@class='tableheader']");

for ($i = 0; $i < $elements->length; $i++){
    print "Node: ".$elements->item($i)->nodeValue."\n";
    $siblings = $xPath->query("following-sibling::tr[@class='indent1']", $elements->item($i));
    foreach ($siblings as $sibling) {
        print "\tSibling: ".$sibling->nodeValue."\n";   
    }

} 

Beklenen çıkışı

Node: Stuff
   Sibling:  Contents
   Sibling:  Contents
Node: Stuff
   Sibling:  Contents
   Sibling:  Content

s

Bunun yerine her biri için ALL tr class = "indent1s" yazdırıyor.

Teşekkürler.

1 Cevap

EDIT:

Tamam belki bu size yardımcı olur. Sadece, her bir kardeş almak ve PHP ile özelliklerini kontrol edin:

foreach ($siblings as $sibling) {
    if (!is_null($sibling->attributes) 
        && $sibling->attributes->getNamedItem('class')->nodeValue == 'indent1') {
           break;
    }
    print "\tSibling: ".$sibling->nodeValue."\n";  
} 

Genel olarak hedefiniz nedir? Sadece ile yapıyı işleme, düğümleri yazdırmak istiyorsanız SAX (PHP ile SAX) daha uygun ve daha kolay olurdu.

Ya da belki XSLT ama ben bu konuda size yardımcı olamaz.