2016-04-15 14 views
0
<table> 
    <tr> 
    <td></td> 
    <td rowspan=2></td> 
    <td></td> <-- select 
    </tr> 
    <tr> 
    <td></td> 
    <td></td> <-- select 
    </tr> 
    <tr> 
    <td></td> 
    <td></td> 
    <td></td> <-- select 
    </tr> 
    <tr> 
    <td></td> 
    <td></td> 
    <td></td> <-- select 
    </tr> 
</table> 

I einen Ausdruck unter Verwendung von XPath 1.0 zu konstruieren versuchen, dass der 2./tr/td Knoten in dem Fall auswählt vorhergehenden/tr/td nodeset hat eine rowspan darin, und 3. td in allen andere Fälle. Ist das möglich?XPath bedingtes Prädikat

EDIT ::: zu klären, das ist nicht die tatsächlichen Daten, wo letzten() würde ausreichen. Die tatsächliche Anzahl der td-Knoten ist unbestimmt.

+0

Es scheint von Ihrem Beispiel, dass Sie drittes td auswählen möchten, selbst wenn das vorhergehende td rowspan-Attribut hat. Können Sie den Anwendungsfall klar machen? – SomeDude

Antwort

1

hässlich, aber funktioniert:

/table/tr/td[2][../preceding-sibling::*[1]/td/@rowspan] | /table/tr/td[3][not(../preceding-sibling::*[1]/td/@rowspan)] 
0

Sie können dies versuchen:

//td[count(@rowspan)>0]/following-sibling::*[name()='td'][1] | //td[position()=3 and not (preceding-sibling::*[name()='td' and count(@rowspan)>0])] 

Mit dem unten stehenden xml:

<table> 
    <tr> 
    <td rowspan="2"></td> 
    <td>following rowspan 1</td> 
    <td>following rowspan 2</td> 
    </tr> 
    <tr> 
    <td></td> 
    <td></td> 
    <td>third1</td> 
    </tr> 
    <tr> 
    <td></td> 
    <td></td> 
    <td>third2</td> 
    </tr> 
    <tr> 
    <td></td> 
    <td></td> 
    <td>third3</td> 
    </tr> 
</table> 

Es wird produzieren:

<td>following rowspan 1</td> 
<td>third1</td> 
<td>third2</td> 
<td>third3</td>